summaryrefslogtreecommitdiffstats
path: root/web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map')
-rw-r--r--web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map1
1 files changed, 0 insertions, 1 deletions
diff --git a/web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map b/web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map
deleted file mode 100644
index c59fb9ffe..000000000
--- a/web/gui/dashboard/static/js/main.e3f3d31b.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["domains/global/options.ts","utils/is-demo.ts","utils/units-conversion.ts","domains/chart/components/resize-handler.tsx","domains/global/actions.ts","components/button/button.tsx","domains/chart/components/toolbox-button.tsx","domains/global/selectors.ts","utils/index.ts","utils/name-2-id.ts","domains/global/reducer.ts","components/icon.tsx","domains/chart/reducer.ts","domains/chart/utils/transformDataAttributes.ts","domains/chart/actions.ts","main.js","domains/global/constants.ts","vendor/d3pie-0.2.1-netdata-3.js","utils/utils.ts","utils/server-detection.ts","domains/chart/selectors.ts","utils/date-time.js","domains/dashboard/actions.ts","domains/chart/constants.ts","domains/chart/utils/seconds4human.ts","domains/dashboard/reducer.ts","store/root-reducer.ts","utils/api.ts","utils/netdata-sdk/axios-instance.ts","utils/netdata-sdk/metrics-stream.ts","utils/fill-missing-data.ts","components/ui-notification/styled.ts","components/ui-notification/ui-notification.tsx","components/notifications/styled.tsx","components/notifications/notifications.tsx","domains/dashboard/utils/parse-url.ts","domains/chart/sagas.ts","components/space-panel/settings.ts","domains/global/alarms-sagas.ts","domains/global/utils.ts","domains/global/sagas.ts","domains/dashboard/sagas.ts","store/root-saga.ts","store/store.ts","domains/chart/utils/jquery-loader.ts","utils/css-loader.ts","domains/chart/utils/chartLibrariesSettings.ts","domains/chart/utils/get-chart-url-options.ts","utils/biggest-interval-number.ts","domains/chart/components/loader.tsx","domains/chart/utils/get-pan-and-zoom-step.ts","utils/safe-equal-check.ts","domains/chart/utils/formatters.ts","utils/color-hex-2-rgb.ts","domains/chart/components/chart-legend-bottom.styled.ts","domains/chart/components/legendText.js","domains/chart/components/chart-legend-right.tsx","domains/chart/components/chart-legend-bottom.tsx","domains/chart/components/chart-legend.tsx","domains/chart/components/legend-toolbox.tsx","domains/chart/components/lib-charts/dygraph/utils.ts","domains/chart/hooks/use-proceeded-chart.ts","domains/chart/hooks/useDygraphBadge.js","domains/chart/components/lib-charts/proceeded-chart-disclaimer.tsx","domains/chart/components/lib-charts/alarmBadge.js","domains/chart/components/lib-charts/neutralPill.js","domains/chart/components/lib-charts/dygraph-chart.tsx","utils/debounce.ts","domains/chart/components/lib-charts/easy-pie-chart.tsx","domains/chart/components/lib-charts/gauge-chart.tsx","domains/chart/utils/color-luminance.ts","domains/chart/components/lib-charts/sparkline-chart.tsx","domains/chart/utils/d3-loader.ts","domains/chart/utils/google-visualization-loader.ts","domains/chart/components/lib-charts/d3pie-chart.tsx","domains/chart/components/lib-charts/peity-chart.tsx","domains/chart/components/lib-charts/google-chart.tsx","domains/chart/components/lib-charts/text-only.tsx","domains/chart/components/lib-charts/group-box-chart/utilities.ts","domains/chart/components/lib-charts/group-box-chart/events.ts","domains/chart/components/lib-charts/group-box-chart/drawBoxes.ts","domains/chart/components/lib-charts/group-box-chart/getAlign.ts","domains/chart/components/lib-charts/group-box-chart/groupBox.tsx","domains/chart/components/lib-charts/group-box-chart/groupBoxes.tsx","domains/chart/components/lib-charts/group-box-chart/legend.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/getLabel.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/separator.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/header.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/tabs.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/section.tsx","domains/chart/utils/get-portal-node-styles.ts","hooks/use-common-intersection.ts","domains/chart/components/invisible-searchable-text.tsx","domains/chart/components/disable-out-of-view.tsx","domains/chart/components/chart-container/chart-container.tsx","domains/dashboard/utils/netdata-dashboard.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/chartOverview.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/chart.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/item.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/dateSection.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/metrics.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/context.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/list.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/popover.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/index.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/transform.ts","domains/chart/components/abstract-chart.tsx","hooks/use-show-value-outside.ts","domains/chart/components/chart.tsx","domains/chart/components/chart-dropdown/styled.ts","domains/chart/components/chart-dropdown/chart-dropdown.tsx","domains/chart/components/chart-spinner/styled.ts","domains/chart/components/chart-spinner/chart-spinner.tsx","domains/chart/components/chart-with-loader/styled.ts","styles/z-index.js","domains/chart/components/chart-with-loader/chart-with-loader.tsx","domains/chart/hooks/use-fetch-new-data-clock.ts","domains/chart/utils/get-chart-pixels-per-point.ts","domains/dashboard/selectors.ts","domains/chart/components/snapshot-loader.tsx","domains/chart/components/portals.tsx","hooks/use-http.ts","domains/dashboard/components/modal-portal.tsx","domains/dashboard/components/print-modal/print-modal.tsx","domains/dashboard/components/sidebar-social-media/styled.ts","domains/dashboard/components/sidebar-social-media/sidebar-social-media.tsx","domains/dashboard/components/sidebar-social-media-portal/sidebar-social-media-portal.tsx","components/notifications-container/notifications-container.tsx","components/header/item.js","components/header/node/index.js","components/tooltips/customTooltip.js","components/tooltips/getContent.js","components/tooltips/index.js","components/header/options/index.js","components/header/protoBuf/dropdown.js","components/header/protoBuf/index.js","components/app-header/components/versionControl/index.js","components/header/version.js","hooks/useToggle/index.js","hooks/useLocalStorage/index.js","components/mdx-components/dropdown/styled.js","components/date-picker/styled.js","components/mdx-components/dropdown/dropdown.js","components/date-picker/timePeriod.js","components/date-picker/utils.js","components/date-picker/timePeriods.js","components/date-picker/customTimePeriod.js","components/datePicker/datePickerLib.js","components/datePicker/styled.js","components/date-picker/datePickerInput.js","components/date-picker/useLocaleDate.js","components/date-picker/useConvertedDate.js","components/date-picker/datePickerWrapper.js","components/date-picker/periodIndication.js","components/date-picker/accessorElement/utils.js","components/date-picker/accessorElement/container.js","components/date-picker/accessorElement/dateBox.js","components/date-picker/accessorElement/durationBox.js","components/date-picker/accessorElement/index.js","components/date-picker/datePickerDrop.js","components/date-picker/reduxDatePickerContainer.js","components/header/globalControls/container.js","components/header/globalControls/playPausePill/styledPill.js","components/header/globalControls/playPausePill/index.js","components/menus/item.js","components/menus/list.js","components/header/globalControls/playOptions/playOptionsTooltip.js","components/menus/styled.js","components/header/globalControls/playOptions/index.js","components/header/globalControls/index.js","components/header/pill/styled.js","components/header/pill/index.js","components/header/alarms.js","components/header/news/index.js","components/header/timezone/dropdown.js","components/header/timezone/search/searchInput.js","components/header/timezone/search/index.js","components/header/timezone/container.js","components/header/timezone/wrapper.js","components/header/timezone/offsetItem.js","components/header/timezone/timezones.js","components/header/timezone/utils.js","components/header/timezone/index.js","components/auth/signIn/index.js","utils/post-message.ts","components/auth/signIn/iframe.js","components/auth/signIn/useCheckSignInStatus.js","components/header/signIn/index.js","components/header/index.js","components/sidebar/spaces/expandButton.js","components/auth/signOut/index.js","components/sidebar/spaces/userSettings.js","components/sidebar/spaces/spacesSkeleton.js","components/sidebar/spaces/spacesIframe.js","components/sidebar/netdataLogo.js","components/sidebar/spaces/index.js","domains/dashboard/utils/sorting.ts","components/sidebar/space/nodes.js","components/sidebar/space/replicatedNodes/anchor.js","components/sidebar/space/replicatedNodes/node.js","components/sidebar/space/replicatedNodes/index.js","components/sidebar/space/spacePanelIframe.js","components/sidebar/space/prompts/signIn/promptContent.js","components/sidebar/space/prompts/signIn/index.js","components/sidebar/space/prompts/offline/noNetwork.js","components/sidebar/space/prompts/offline/index.js","components/sidebar/space/index.js","components/sidebar/index.js","components/layout/index.js","utils/map-theme.ts","App.tsx","hooks/use-registry.ts","hooks/use-alarms.ts","hooks/use-info.ts","domains/dashboard/hooks/use-charts-metadata.ts","domains/dashboard/hooks/useAlarmFromUrl.js","index.tsx","../public/lib/dygraph-c91c859.min.js","domains/chart/utils/legend-utils.ts","utils/hash-utils.ts","utils/env.ts","domains/dashboard/constants.ts","store/redux-separate-context.ts","utils/createRequestAction.ts"],"names":["SYNC_PAN_AND_ZOOM","INITIAL_OPTIONS","Boolean","window","netdataShowHelp","netdataNoBootstrap","getOptionsMergedWithLocalStorage","optionsFromLocalStorage","Object","keys","localStorage","filter","key","startsWith","map","replace","localStorageKeyToOption","parsed","value","getItem","removeItem","JSON","parse","e","console","log","getItemFromLocalStorage","o","values","overridenOptions","mergeAll","mergeRight","optionsMergedWithLocalStorage","initialLegendRight","clearLocalStorage","forEach","LOCALSTORAGE_HEIGHT_KEY_PREFIX","isPrintMode","location","hash","split","includes","isDemo","hostname","document","endsWith","getIsDemo","currentTemperatureSetting","currentSecondsAsTimeSetting","zeropad","x","toString","scalableUnits","pps","Kpps","Mpps","bytes","kilobytes","megabytes","gigabytes","terabytes","Hz","kHz","MHz","GHz","THz","PHz","EHz","ZHz","B","KiB","MiB","GiB","TiB","PiB","KB","MB","GB","TB","PB","EB","EiB","convertibleUnits","Celsius","Fahrenheit","check","convert","celsius","fahrenheit","seconds","time","unitsConversionCreator","seconds2time","milliseconds","max","tms","Math","round","millisecondsRet","floor","millisecondsReturn","minutes","identity","latest","globalReset","this","secondsReturn","abs","days","hours","get","uuid","min","units","desiredUnits","commonUnitsName","switchUnitsCallback","temperatureSetting","secondsAsTimeSetting","undefined","newConvertFunction","tunits","tdivider","scalableUnitsGroup","unit","unitDivider","commonUnitsKey","t","divider","commonUnits","LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD","ResizeHandler","chartContainerElement","chartUuid","heightId","isLegendOnBottom","useState","clientHeight","resizeHeight","setResizeHeight","dispatch","useDispatch","useEffect","setResizeHeightAction","id","handleResize","useCallback","event","preventDefault","intialHeight","eventStartHeight","type","touches","clientY","setHeight","currentHeight","nextHeight","style","height","heightForPersistance","LEGEND_BOTTOM_SINGLE_LINE_HEIGHT","setItem","onMouseMove","onTouchMove","addEventListener","onTouchEnd","removeEventListener","onMouseEnd","className","onDoubleClick","stopPropagation","onMouseDown","onTouchStart","iconType","popoverTitle","popoverContent","requestCommonColorsAction","createAction","storeKey","setCommonMinAction","setCommonMaxAction","setGlobalSelectionAction","setGlobalPanAndZoomAction","resetGlobalPanAndZoomAction","setDefaultAfterAction","resetDefaultAfterAction","setGlobalChartUnderlayAction","centerAroundHighlightAction","clearHighlightAction","windowFocusChangeAction","fetchHelloAction","createRequestAction","updatePersonUrlsAction","accessRegistrySuccessAction","startAlarmsAction","fetchAllAlarmsAction","updateActiveAlarmsAction","setOptionAction","resetOptionsAction","loadSnapshotAction","chartsMetadataRequestSuccess","setSpacePanelStatusAction","setSpacePanelTransitionEndAction","setAlarmAction","resetRegistry","setGlobalPauseAction","resetGlobalPauseAction","setUTCOffset","Button","React","ref","children","rest","classNames","ToolboxButton","onClick","buttonRef","useRef","showHelp","useSelector","selectShowHelp","current","$","popover","container","animation","html","trigger","placement","delay","show","NETDATA","options","show_help_delay_show_ms","hide","show_help_delay_hide_ms","title","content","createSelectAssignedColors","args","state","keyName","getKeyForCommonColorsState","substate","commonColorsKeys","assigned","selectGlobal","global","selectCommonMin","createSelector","_","commonMinKey","globalState","commonMin","selectCommonMax","commonMaxKey","commonMax","selectGlobalSelection","prop","selectGlobalSelectionMaster","selectGlobalPanAndZoom","selectDefaultAfter","selectGlobalChartUnderlay","selectHasWindowFocus","selectGlobalPause","selectSnapshot","selectRegistry","selectCloudBaseUrl","selectSignInUrl","utmParameters","registry","cloudBaseURL","name","encodeURIComponent","origin","alwaysEndWithSlash","pathname","machineGuid","utmUrlSuffix","reduce","acc","utmParametersToString","selectIsUsingGlobalRegistry","registryServer","selectIsCloudEnabled","isCloudEnabled","isHelloCallError","selectHasFetchedInfo","selectFullInfoPayload","selectLacksProtoBufSupport","info","selectHasStartedAlarms","path","selectActiveAlarms","alarms","activeAlarms","selectAlarm","alarm","selectSpacePanelIsActive","selectSpacePanelTransitionEndIsActive","selectOptions","createSelectOption","optionName","selectDestroyOnHide","selectStopUpdatesWhenFocusIsLost","selectShouldEliminateZeroDimensions","selectIsAsyncOnScroll","selectSyncSelection","selectSyncPanAndZoom","selectTheme","selectPanAndZoomDataPadding","selectSmoothPlot","selectUnitsScalingMethod","selectTemperatureSetting","selectSecondsAsTimeSetting","selectTimezoneSetting","selectUTCOffsetSetting","selectChartsMetadata","chartsMetadata","data","selectChartMetadataFromChartsCall","chartId","allMetadata","charts","name2id","s","initialState","currentSelectionMasterId","globalPanAndZoom","defaultAfter","isMainJs","getInitialAfterFromWindow","globalChartUnderlay","hoveredX","hasWindowFocus","hasFocus","globalPause","spacePanelIsActive","spacePanelTransitionEndIsActive","hasFetchedInfo","hasFetchedHello","isCloudAvailable","isAgentClaimed","isACLKAvailable","hasStartedInfo","isFetchingHello","fullInfoPayload","personGuid","registryMachines","registryMachinesArray","snapshot","hasStartedAlarms","isFetching","isFetchingError","globalReducer","createReducer","colorsAttribute","commonColorsAttribute","chartContext","hasCustomColors","length","hasLastOnly","array","last","createCommonColorsKeysSubstate","custom","init","shouldCopyTheme","available","themes","colors","on","dimensionNames","subState","currentlyAssignedNr","requestedDimensionsAssigned","dimensionName","i","currentExtreme","isActive","payload","after","before","masterID","warn","highlightMargin","resetPanAndZoom","hasFocusNow","forcePlay","stop_updates_when_focus_is_lost","utcOffset","request","success","failure","CLOUD_BASE_URL_DISABLED","fetchInfoAction","parsedData","dataKey","uncompressed","uncompress","obj","typeToClassName","left","reset","right","zoomIn","zoomOut","resize","lineChart","areaChart","noChart","loading","noData","Icon","initialSingleState","chartData","chartMetadata","chartPanAndZoom","fetchDataParams","isRemotelyControlled","viewRange","isFetchingData","isFetchDataFailure","isFetchDetailsFailure","isFetchingDetails","snapshotDataIsFetching","snapshotDataIsError","snapshotData","chartReducer","getSubstate","fetchDataAction","chart","fetchDataCancelAction","useNewKeysOnlyIfDifferent","fetchDataForSnapshotAction","snapshotExportResetAction","pick","fetchChartAction","setChartPanAndZoomAction","shouldForceTimeRange","resetChartPanAndZoomAction","assoc","clearChartStateAction","omit","getDataAttribute","element","defaultValue","hasAttribute","getAttribute","test","getAttributesStatic","node","mapObjIndexed","attribute","getDataAttributeBoolean","host","httpMethod","chartLibrary","chartDefaults","library","width","legend","legendPosition","unitsCommon","unitsDesired","aggrMethod","labels","postGroupBy","postAggregationMethod","dimensionsAggrMethod","aggrGroups","selectedChart","filteredRows","groupBy","nodeIDs","commonColors","decimalDigits","dimensions","selectedDimensions","forceTimeWindow","appendOptions","gtime","method","overrideOptions","pixelsPerPoint","points","hideResizeHandler","detectResize","dygraphType","dygraphValueRange","dygraphTheme","dygraphSmooth","dygraphColors","dygraphRightGap","dygraphShowRangeSelector","dygraphShowRoller","dygraphTitle","dygraphTitleHeight","dygraphLegend","dygraphLabelsDiv","dygraphLabelsSeparateLine","dygraphIncludeZero","dygraphShowZeroValues","dygraphShowLabelsOnHighLight","dygraphHideOverlayOnMouseOut","dygraphXRangePad","dygraphYRangePad","dygraphYLabelWidth","dygraphStrokeWidth","dygraphStrokePattern","dygraphDrawPoints","dygraphDrawGapEdgePoints","dygraphConnectSeparatedPoints","dygraphPointSize","dygraphStepPlot","dygraphStrokeBorderColor","dygraphStrokeBorderWidth","dygraphFillGraph","dygraphFillAlpha","dygraphStackedGraph","dygraphStackedGraphNanFill","dygraphAxisLabelFontSize","dygraphAxisLineColor","dygraphAxisLineWidth","dygraphDrawGrid","dygraphGridLinePattern","dygraphGridLineWidth","dygraphGridLineColor","dygraphMaxNumberWidth","dygraphSigFigs","dygraphDigitsAfterDecimal","dygraphHighlighCircleSize","dygraphHighlightSeriesOpts","dygraphHighlightSeriesBackgroundAlpha","dygraphXPixelsPerLabel","dygraphXAxisLabelWidth","dygraphDrawXAxis","dygraphYPixelsPerLabel","dygraphYAxisLabelWidth","dygraphDrawYAxis","dygraphDrawAxis","easyPieChartMinValue","easyPieChartMaxValue","easyPieChartBarColor","easyPieChartTrackColor","easyPieChartScaleColor","easyPieChartScaleLength","easyPieChartLineCap","easyPieChartLineWidth","easyPieChartTrackWidth","easyPieChartSize","easyPieChartRotate","easyPieChartAnimate","easyPieChartEasing","gaugeMinValue","gaugeMaxValue","gaugePointerColor","gaugeStrokeColor","gaugeStartColor","gaugeStopColor","gaugeGenerateGradient","sparklineType","sparklineLineColor","sparklineFillColor","sparklineChartRangeMin","sparklineChartRangeMax","sparklineComposite","sparklineEnableTagOptions","sparklineTagOptionPrefix","sparklineTagValuesAttribute","sparklineDisableHiddenCheck","sparklineDefaultPixelsPerValue","sparklineSpotColor","sparklineMinSpotColor","sparklineMaxSpotColor","sparklineSpotRadius","sparklineValueSpots","sparklineHighlightSpotColor","sparklineHighlightLineColor","sparklineLineWidth","sparklineNormalRangeMin","sparklineNormalRangeMax","sparklineDrawNormalOnTop","sparklineXvalues","sparklineChartRangeClip","sparklineChartRangeMinX","sparklineChartRangeMaxX","sparklineDisableInteraction","sparklineDisableTooltips","sparklineOnHover","sparklineDisableHighlight","sparklineHighlightLighten","sparklineHighlightColor","sparklineTooltipContainer","sparklineTooltipClassname","sparklineTooltipFormat","sparklineTooltipPrefix","sparklineTooltipSuffix","sparklineTooltipSkipNull","sparklineTooltipValueLookups","sparklineTooltipFormatFieldlist","sparklineTooltipFormatFieldlistKey","sparklineNumberFormatter","sparklineNumberDigitGroupSep","sparklineNumberDecimalMark","sparklineNumberDigitGroupCount","sparklineAnimatedZooms","d3pieTitle","d3pieSubtitle","d3pieFooter","d3pieTitleColor","d3pieTitleFontsize","d3pieTitleFontweight","d3pieTitleFont","d3PieSubtitleColor","d3PieSubtitleFontsize","d3PieSubtitleFontweight","d3PieSubtitleFont","d3PieFooterColor","d3PieFooterFontsize","d3PieFooterFontweight","d3PieFooterFont","d3PieFooterLocation","d3PiePieinnerradius","d3PiePieouterradius","d3PieSortorder","d3PieSmallsegmentgroupingEnabled","d3PieSmallsegmentgroupingValue","d3PieSmallsegmentgroupingValuetype","d3PieSmallsegmentgroupingLabel","d3PieSmallsegmentgroupingColor","d3PieLabelsOuterFormat","d3PieLabelsOuterHidewhenlessthanpercentage","d3PieLabelsOuterPiedistance","d3PieLabelsInnerFormat","d3PieLabelsInnerHidewhenlessthanpercentage","d3PieLabelsMainLabelColor","d3PieLabelsMainLabelFont","d3PieLabelsMainLabelFontsize","d3PieLabelsMainLabelFontweight","d3PieLabelsPercentageColor","d3PieLabelsPercentageFont","d3PieLabelsPercentageFontsize","d3PieLabelsPercentageFontweight","d3PieLabelsValueColor","d3PieLabelsValueFont","d3PieLabelsValueFontsize","d3PieLabelsValueFontweight","d3PieLabelsLinesEnabled","d3PieLabelsLinesStyle","d3PieLabelsLinesColor","d3PieLabelsTruncationEnabled","d3PieLabelsTruncationTruncatelength","d3PieMiscColorsSegmentstroke","d3PieMiscGradientEnabled","d3PieMiscColorsPercentage","d3PieMiscGradientColor","d3PieCssprefix","peityStrokeWidth","textOnlyDecimalPlaces","textOnlyPrefix","textOnlySuffix","getAttributes","attributesStatic","showValueOf","showValueOfAttribues","Array","from","attributes","merged","isEmpty","getAttributesDynamic","defaultAttributes","localeDateString","localeTimeString","updateLocaleFunctions","newLocaleDateString","newLocaleTimeString","netdataShowAlarms","netdataRegistry","netdataServer","netdataServerStatic","netdataCheckXSS","reduxStore","escapeUserInputHTML","setOption","getFromRegistry","getState","verifyURL","urlOptions","theme","help","mode","update_always","pan_and_zoom","server","getHashParam","highlight","highlight_after","highlight_before","nowelcome","show_alarms","family","utc","hasProperty","property","genHash","forReload","parseHash","variables","len","p","decodeURIComponent","booleans","numeric","parseInt","welcome","Date","now","hashUpdate","history","replaceState","netdataPanAndZoomCallback","status","netdataSnapshotData","updateUtcParam","netdataHighlightCallback","d1","d2","getElementById","innerHTML","seconds4human","tooltip","clearHighlight","showHighlight","localStorageTested","localStorageTest","Storage","loadLocalStorage","ret","error","saveLocalStorage","getTheme","def","setTheme","netdataTheme","updateTheme","naturalSortChunkify","j","tz","y","n","charAt","charCodeAt","m","naturalSortCompare","a","b","aa","toLowerCase","bb","c","Number","d","saveTextToClient","filename","blob","Blob","url","URL","createObjectURL","link","createElement","setAttribute","el","appendChild","setTimeout","removeChild","revokeObjectURL","click","saveObjectToClient","stringify","netdataURL","indexOf","substring","netdataReload","reload","gotoHostedModalHandler","gotoServerValidateRemaining","gotoServerMiddleClick","gotoServerStop","gotoServerValidateUrl","guid","penalty","finalURL","registryHello","machine_guid","open","modal","gotoServerModalHandler","checked","alternateUrls","count","registrySearch","urls","switchRegistryModalHandler","notifyForSwitchRegistry","newPersonGuid","ajax","serverDefault","async","cache","headers","xhrFields","withCredentials","done","xss","checkAlways","fail","deleteRegistryGuid","deleteRegistryUrl","deleteRegistryModalHandler","notifyForDeleteRegistry","responseEl","registryDelete","result","menus","submenu_names","version","release_channel","hosts","duration","update_every","chartsPerRow","chartsHeight","total","prioritySort","priority","sortObjectByPriority","object","idx","sorted","hasOwnProperty","push","sort","scrollToId","offset","animate","scrollTop","top","customDashboard","menu","submenu","context","netdataDashboard","sparklines_registry","os","sparkline","prefix","dimension","suffix","gaugeChart","anyAttribute","attr","menuTitle","menu_pattern","slice","menuIcon","menuInfo","menuHeight","submenuTitle","submenuInfo","submenuHeight","relative","contextInfo","contextValueRange","valueRange","contextHeight","contextDecimalDigits","enrichChartData","parts","tmp","match","lastIndexOf","headMain","head","generateHeadCharts","hcharts","hi","hlen","renderPage","div","pcent_width","sidebar","mainhead","main","hasChartsOnBottom","chartAdditionalHeight","menuid","icon","shtml","mhead","sub","submenus","si","slen","submenuid","chtml","ci","clen","chartHeight","chartCommonMax","isMemoryModeDbEngine","memory_mode","dimensions_count","toLocaleString","charts_count","alarms_count","printPage","finalizePage","renderChartsAndMenu","menu_key","handleLoadJs","promise","callback","catch","alert","then","loadClipboard","clipboard","loadBootstrapTable","Promise","all","loadBootstrapSlider","slider","default","Slider","loadLzString","loadPako","pako","alarmsUpdateModal","active","footer","alarm_families","count_active","count_all","families","families_sort","charts_by_name","arr","unshift","families_sorted","fc","active_family_added","alarm_to_html","enableTooltipsAndPopovers","alarm_family_show","$accordion","target","bootstrapTable","pagination","pageSize","showPaginationSwitch","search","searchTimeOut","searchAlign","showColumns","showExport","exportDataType","exportOptions","fileName","onClickRow","row","scrollToChartAfterHidingModal","when","rowStyle","classes","showFooter","showHeader","showRefresh","showToggle","sortable","silentSort","columns","field","valign","titleTooltip","formatter","index","timestamp4human","align","switchable","visible","alarmid4human","negative_suffix","space","timestamp","toLocaleDateString","toLocaleTimeString","full","has_alarm","crit","badge_url","action_buttons","recipient","last_status_change","lookup_after","lookup_dimensions","lookup_method","lookup_before","lookup_options","alarm_lookup_explain","calc","green","red","warn_repeat_every","crit_repeat_every","delay_up_duration","delay_down_duration","delay_multiplier","delay_max_duration","exec","source","initializeDynamicDashboardWithData","timezone","clipboardCopy","text","writeText","clipboardCopyBadgeEmbed","initializeConfig","custom_info","loadDashboardInfo","memoizeWith","dataType","loadCustomDashboardInfo","always","extend","initializeChartsAndCustomInfo","chartRegistry","downloadAll","initializeDynamicDashboard","newReduxStore","netdataPrepCallback","innerText","versionLog","msg","versionsMatch","v1","v2","s1","s2","n1","n2","getGithubLatestVersion","tag_name","getGCSLatestVersion","response","mediaLink","xhr","textStatus","errorThrown","checkForUpdateByVersion","force","sha2","showPageFooter","display","parseDom","jsonStringifyFn","jsonParseFn","str","eval","xssModalDisableXss","enabled","enabled_for_data","xssModalKeepXss","notifyForUpdate","sha1","save","printPreflight","screen","snapshotOptions","bytes_per_chart","compressionDefault","compressions","bytes_per_point_memory","bytes_per_point_disk","compress","compressed_length","btoa","deflate","to","inflate","atob","LZString","compressToUTF16","decompressFromUTF16","compressToBase64","decompressFromBase64","compressToEncodedURIComponent","decompressFromEncodedURIComponent","loadSnapshotModalLog","tmpSnapshotData","loadSnapshotPreflightFile","file","string","fr","FileReader","onload","date_after","after_ms","date_before","before_ms","charts_ok","charts_failed","compression","data_size","netdata_version","data_points","duration_ms","snapshot_version","comments","removeClass","addClass","readAsText","loadSnapshotPreflightEmpty","loadSnapshot","highlight_after_ms","highlight_before_ms","loadSnapshotDragAndDropInitialized","loadSnapshotDragAndDropSetup","originalEvent","dataTransfer","files","item","loadSnapshotPreflight","saveSnapshotStop","saveSnapshotCancel","stopSnapshotModeAction","saveSnapshotModalInitialized","saveSnapshotModalSetup","saveSnapshotModalInit","find","focus","saveSnapshotModalLog","saveSnapshotModalShowExpectedSize","saveSnapshotViewDuration","saveSnapshotSelectedSecondsPerPoint","sizemb","saveSnapshotCompression","memmb","saveSnapshotSetCompression","saveSnapshotSlider","browser_timezone","reduxState","start_ms","start_date","yyyymmddhhssmm","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","view","destroy","ticks","step","scale","saveSnapshot","eltxt","saveData","update_every_ms","pack_api1_v1_chart_data","chartDataUniqueID","cstr","clearPanAndZoom","startSnapshotModeAction","dataPoints","saveSnapshotRestore","css","size","chartUpdated","chartsCount","selectAmountOfCharts","chartsOk","selectAmountOfSnapshotsFetched","chartsFailed","selectAmountOfSnapshotsFailed","pcent","Intl","DateTimeFormat","resolvedOptions","timeZone","getOption","option","dashboardSettingsSetup","update_options_modal","sync_option","self","bootstrapToggle","units_sync_option","temp_sync_option","change","CHART_DIV_ID_PREFIX","CHART_DIV_OFFSET","scrollDashboardTo","chartElement","offsetTop","querySelector","modalHiddenCallback","animated","alarmDate","alarmStatus","runOnceOnDashboardLastRun","runOnceOnDashboardWithjQuery","body","scrollspy","scrollPos","modal_depth","modal_shown","netdata_paused_on_modal","scrollspyOffset","scrollY","overflow","position","pauseCallback","pause","unpause","affix","bottom","removeAttr","Ps","initialize","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","fn","shorten","settings","config","showChars","minHideChars","ellipsesText","moreText","lessText","onLess","onscroll","onMore","errMsg","off","$this","hasClass","parent","prev","each","substr","inTag","bag","countChars","openTags","tagName","r","shift","retries_on_data_failures","q","arguments","l","getElementsByTagName","src","parentNode","insertBefore","ga","onresizeCallback","update","resetDashboardOptions","selected_server_timezone","isProperTimezone","userSetServerTimezone","timezoneOption","netdataCallback","showSignInModal","explicitlySignIn","explicitlySignInAction","MASKED_DATA","INFO_POLLING_FREQUENCY","alarmStatuses","define","_uniqueIDCounter","defaultSettings","header","color","fontSize","fontWeight","font","subtitle","titleSubtitlePadding","canvasHeight","canvasWidth","pieInnerRadius","pieOuterRadius","sortOrder","ignoreSmallSegments","valueType","smallSegmentGrouping","label","outer","format","hideWhenLessThanPercentage","pieDistance","inner","mainLabel","percentage","decimalPlaces","lines","truncation","truncateLength","effects","load","effect","speed","pullOutSegmentOnClick","highlightSegmentOnMouseover","highlightLuminosity","tooltips","placeholderParser","styles","fadeInSpeed","backgroundColor","backgroundOpacity","borderRadius","padding","misc","background","segments","segmentStroke","gradient","canvasPadding","pieCenterOffset","cssPrefix","callbacks","onMouseoverSegment","onMouseoutSegment","onClickSegment","validate","pie","d3","HTMLElement","SVGElement","helpers","isArray","isNaN","addSVGSpace","svg","select","append","shuffleArray","tmpVal","randomIndex","currentIndex","random","processObj","is","getDimensions","w","h","getBBox","rectIntersect","r1","r2","getColorShade","hex","lum","String","newHex","initSegmentColors","finalColors","applySmallSegmentGrouping","totalSize","math","getTotalPieSize","newData","groupedData","totalGroupedData","isGrouped","showPoint","isFunction","functionToCheck","call","prototype","copy","copyIsArray","clone","deep","hasOwn","class2type","jQuery","isWindow","isNumeric","parseFloat","isFinite","isPlainObject","nodeType","constructor","toRadians","degrees","PI","toDegrees","radians","computePieRadius","textComponents","headerHeight","exists","innerRadius","percent","outerRadius","smallestDimension","pieDistanceSpace","sortPieData","getPieTranslateCenter","pieCenter","calculatePieCenter","hasTopTitle","hasTopSubtitle","headerOffset","footerOffset","rotate","xm","ym","cos","sin","translate","rads","pointIsInArc","pt","ptData","d3Arc","theta1","startAngle","theta2","endAngle","dist","angle","atan2","add","section","sectionDisplayType","include","getIncludes","outerLabel","insert","labelGroup","__labels","selectAll","enter","formatterContext","part","positionLabelElements","dims","computeLabelLinePositions","lineCoordGroups","computeLinePosition","x2","y2","x3","y3","getSegmentAngle","midpoint","originCoords","heightOffset","outerLabelGroupData","quarter","startOfLabelX","startOfLabel","addLabelLines","lineGroup","lineFunction","line","curve","curveBasis","positionLabelGroups","pieCenterCopy","newCoords","xOffset","yOffset","val","addMainLabel","addValue","addPercentage","computeOuterLabelCoords","getIdealOuterLabelPositions","resolveOuterLabelCollisions","checkConflict","currIndex","direction","curr","currIndexHemisphere","hs","nextIndex","currLabelGroup","examinedLabelGroup","labelHeights","center","lineLength","heightChange","isLabelHidden","adjustLabelPos","lastCorrectlyPositionedLabel","xDiff","yDiff","newXPos","newYPos","sqrt","labelGroupNode","labelGroupDims","originalX","originalY","hemisphere","effectMap","easeLinear","easeBounce","easeSin","easeElastic","easeBack","easeQuad","easeCircle","easeExp","create","pieChartElement","arc","addGradients","grads","addSegmentEventHandlers","merge","segment","currentEl","isExpanded","onSegmentEvent","closeSegment","openSegment","segColor","tt","showTooltip","moveTooltip","hideTooltip","func","expanded","isOpeningSegment","maybeCloseOpenSegment","transition","ease","centroid","pullOutSize","currentlyOpenSegment","getCentroid","bbox","opts","fullValue","compounded","currValue","offscreenCoord","addTitle","__title","positionTitle","headerLocation","addSubtitle","__subtitle","positionSubtitle","getHeaderHeight","addFooter","__footer","positionFooter","footerLocation","footerWidth","totalTitleHeight","footerPlusPadding","addTooltips","caption","replacePlaceholders","currentTooltip","mouseCoords","mouse","replacements","placeholder","d3pie","_setupData","_init","recreate","redraw","getOpenSegment","updateProp","propKey","oldVal","oldValue","dp","_getPercentage","totalPercentage","toFixed","relativeAmount","isTimestamp","NETDATA_REGISTRY_SERVER","MS_IN_SECOND","getIframeSrc","getBoundingClientRect","obj1","obj2","equals","currentScript","isTestingEnv","getDefaultServer","isDevelopmentEnv","RegExp","getPathFromScriptSource","cond","T","pipe","concat","serverStatic","selectChartsState","selectSingleChartState","chartsState","selectChartData","chartState","selectChartMetadataFromExplicitCall","selectChartMetadata","metadataFromAll","metadataFromSingleCall","selectIsFetchingDetails","makeSelectChartMetadataRequest","selectChartViewRange","selectChartIsFetchingData","selectChartFetchDataParams","selectResizeHeight","selectChartPanAndZoom","selectAmountOfFetchedCharts","some","hasCompletedFetching","selectNameOfAnyFetchingChart","isSupportingDateTimeFormat","navigator","language","narrowToDate","localeDateStringNative","localeTimeStringNative","xAxisTimeStringNative","date","localeMatcher","formatMatcher","weekday","year","month","day","dateFormat","locale","long","isTime","secs","hourCycle","dateStyle","timeStyle","getOptions","getTimezone","useDateTime","useMemo","xAxisTimeString","xAxisDateString","showSignInModalAction","isSignedInAction","setOfflineAction","fallbackUpdateTimeInterval","panAndZoomDelay","totalSeconds","defaultOptions","hour","minute","second","and","strings","pop","join","isSnapshotMode","snapshotCharts","snapshotDataPoints","isSignedIn","offline","dashboardReducer","combineReducers","globalKey","chartKey","dashboardKey","axiosInstance","axios","Pragma","getFetchStream","concurrentCallsLimit","fetch$","Subject","resetFetch$","handler","mergeMap","params","onErrorCallback","onSuccessCallback","cancelTokenSource","timeout","cancelToken","token","tap","responseData","catchError","message","empty","startWith","switchMap","subscribe","fillMissingData","nrOfPointsToFill","viewUpdateEvery","view_update_every","firstAddedTimestamp","emptyPoint","tail","nulls","fill","addPointsDygraph","emptyArray","transformResults","shouldRevertFlip","dataResult","reverse","pointData","sum","Container","styled","getSizeBy","SideContent","ContentContainer","HeaderText","Text","getColor","ContentText","TextSmall","UINotification","props","leftContent","rightContent","renderContent","createUINotification","NodeIconContainer","NotificationLink","toastOptions","toast","POSITION","BOTTOM_RIGHT","autoClose","pauseOnFocusLoss","showCloudInstallationProblemNotification","notificationComponent","showCloudConnectionProblemNotification","uiNotification","href","defaultUrlOptions","alarm_unique_id","alarm_id","alarm_event_id","alarm_when","parseQueryPair","isInvalidPair","mapIndexed","parseUrl","watchFetchDataResponseChannel","fetchDataSaga","fetchChartSaga","fetchInfoSaga","chartSagas","CONCURRENT_CALLS_LIMIT_METRICS","fetchDataResponseChannel","channel","take","action","start","end","put","constructCompatibleKey","IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS","getGroupByValues","fetchMetrics$","group","dimensionsWithUrlOptions","matchingKey","snapshotKey","agentOptionsOriginal","hasFlip","agentOptions","shouldAddFakeFlip","groupValues","axiosOptions","agent_options","post_aggregation_methods","aggregations","valueOf","fillMissingPoints","transformedResults","postAggregated","post_aggregated_data","next","fetchForSnapshot$","resetFetchForSnapshot$","fetchDataForSnapshotSaga","aggr_method","node_ids","stopSnapshotModeSaga","poll","wasCloudAvailable","wasACLKAvailable","takeEvery","spawn","sidePanelTransitionTimeInSeconds","getLog","notifyAll","alarmsLoop","startAlarms","fetchAllAlarmsSaga","alarmsSagas","ALARMS_INITIALIZATION_DELAY","ALARMS_UPDATE_EVERY","ALARMS_MS_BETWEEN_NOTIFICATIONS","areNotificationsAvailable","notificationCallback","netdataAlarmsNotifCallback","firstNotificationId","lastNotificationId","scrollToAlarm","chartID","scrollToChart","requestPermissions","Notification","permission","requestPermission","hasGivenNotificationPermissions","lastNotificationIdArg","getNotification","entry","firstNotificationIdArg","updated","valueString","value_string","tag","interaction","unique_id","old_status","no_clear_notification","notificationTitle","notificationOptions","requireInteraction","notificationHandler","alarmLogs","logsSorted","sortBy","newLogs","notifications","onclick","netdataAlarmsRemember","what","latest_alarm_log_unique_id","allAlarms","allowedReferrerDomains","isAllowedReferrer","referrer","watchWindowFocusChannel","waitForFullInfoPayload","injectPosthog","fetchHelloSaga","spacePanelSaga","globalSagas","windowFocusChannel","listenToWindowFocus","posthog","__SV","_i","g","api_host","u","people","loaded","identify","shouldMaskReferrer","register","$ip","$current_url","$pathname","$host","$initial_referring_domain","$initial_referrer","$referring_domain","$referrer","event_source","netdata_machine_guid","netdata_person_id","netdata_buildinfo","netdata_release_channel","mirrored_host_count","mirrored_hosts","alarms_normal","normal","alarms_warning","warning","alarms_critical","critical","host_os_name","os_name","host_os_id","os_id","host_os_id_like","os_id_like","host_os_version","os_version","host_os_version_id","os_version_id","host_os_detection","os_detection","system_cores_total","cores_total","system_total_disk_space","total_disk_space","system_cpu_freq","cpu_freq","system_ram_total","ram_total","system_kernel_name","kernel_name","system_kernel_version","kernel_version","system_architecture","architecture","system_virtualization","virtualization","system_virt_detection","virt_detection","system_container","system_container_detection","container_detection","container_os_name","container_os_id","container_os_id_like","container_os_version","container_os_version_id","host_collectors_count","collectors","host_cloud_enabled","host_cloud_available","host_agent_claimed","host_aclk_available","host_aclk_implementation","host_allmetrics_json_used","host_allmetrics_prometheus_used","host_allmetrics_shell_used","host_charts_count","host_dashboard_used","host_metrics_count","host_notification_methods","config_memory_mode","config_exporting_enabled","config_exporting_connectors","config_hosts_available","config_https_enabled","config_multidb_disk_quota","config_page_cache_size","config_stream_enabled","config_web_enabled","host_is_parent","host_labels","_is_parent","mirrored_hosts_reachable","mirrored_hosts_status","reachable","mirrored_hosts_unreachable","host_collectors","host_is_k8s_node","is_k8s_node","accessRegistry","maxRedirects","machine","isRedirect","returnData","person_guid","parsePersonUrls","personUrls","lastTimestamp","accesses","existingObj","isNewer","extended","uniq","helloCallUrl","cloud_base_url","isUsingGlobalRegistry","accessRegistryResponse","anonymous_statistics","constructOptionStorageKey","setOptionSaga","showSignInSaga","mainJsSagas","LOCAL_STORAGE_NEEDS_SYNC","setGlobalChartUnderlaySaga","hashParams","getHashParams","setHashParams","clearHighlightSaga","removeHashParams","signInLinkHref","rootSaga","sagaMiddleware","createSagaMiddleware","store","createStore","rootReducer","compose","applyMiddleware","run","configureStore","loadCss","resolve","reject","fileRef","onerror","Error","isDygraphSparkline","chartLibrariesSettings","dygraph","hasToolboxPanAndZoom","xssRegexIgnore","isLogScale","hasLegend","trackColors","containerClass","peity","google","easypiechart","aspectRatio","gauge","textonly","groupbox","getChartURLOptions","shouldEliminateZeroDimensions","BIGGEST_INTERVAL_NUMBER","Loader","containerNode","hasEmptyData","screenHeight","lost","paddingTop","clientWidth","getPanAndZoomStep","ctrlKey","pan_and_zoom_factor","pan_and_zoom_factor_multiplier_control","shiftKey","pan_and_zoom_factor_multiplier_shift","altKey","pan_and_zoom_factor_multiplier_alt","safeEqualCheck","formattersFixed","formattersZeroBased","fastNumberFormat","NumberFormat","useGrouping","minimumFractionDigits","maximumFractionDigits","getLegendFormatValue","convertUnits","intlNumberFormat","valueDecimalDetail","dmin","dmax","convertedValue","useFormatters","setConvertUnits","setMin","setMax","unitsCurrent","setUnitsCurrent","decimals","setDecimals","setIntlNumberFormat","legendFormatValue","legendFormatValueRef","updateLegendFormatValueRef","newConvertUnits","newIntlNumberFormat","newDecimalDigits","legendFormatValueDecimalsFromMinMax","newMin","newMax","switchedUnits","newDecimals","convertedMin","convertedMax","delta","defaultColor","LegendContainer","LegendFirstRow","LegendSecondRow","LegendUnit","DateTimeSeparator","span","LegendItems","DimensionItem","isDisabled","DimensionItemToolboxPlaceholder","DimensionIcon","DimensionLabel","DimensionValue","ToolboxContainer","emptyObject","selector","dimension_names","LegendText","ChartLegendRight","hoveredRow","onDimensionClick","showLatestOnBlur","viewBefore","dimensionIds","dimension_ids","showUndefined","legendDate","colorFillOpacity","chart_type","scrollbarRef","legendPluginModuleString","legendResolutionTooltip","dimensionId","rgb","hexFull","colorHex2Rgb","isSelected","hoveredValueArray","view_latest_values","role","tabIndex","ChartTimeframe","ChartLegendBottom","legendToolbox","resizeHandler","ChartLegend","setSelectedDimensions","clickedDimensionName","isModifierKeyPressed","newSelectedDimensions","getNewSelectedDimensions","allDimensions","LegendToolbox","onToolboxLeftClick","onToolboxRightClick","onToolboxZoomInClick","onToolboxZoomOutClick","getDataForFakeStacked","dimensionsVisibility","point","currentMin","currentMax","isVisible","getDygraphChartType","chartSettings","dygraphRequestedType","dygraphChartType","getBackgroundColor","Color","transformColors","mix","getDygraphFillAlpha","isFakeStacked","color_fill_opacity_fake_stacked","color_fill_opacity_stacked","color_fill_opacity_area","useProceededChart","chartRef","propsRef","useToggle","proceeded","toggleProceeded","updatePosition","getArea","distance","toDomXCoord","first_entry","hasProceeded","defaultPositionTo","topMargin","isRendered","toggleIsRendered","positionTo","ProceededChartDisclaimer","forwardRef","data-testid","rel","backgroundColorMap","WARNING","CRITICAL","CLEAR","borderColorMap","getBorderColor","textColorMap","Badge","border","NeutralPill","getMissingTime","getInitialDygraphOptions","hiddenLabelsElementId","orderedColors","setMinMax","shouldSmoothPlot","isSparkline","highlightCircleSize","axis","grid","rightGap","showRangeSelector","showRoller","titleHeight","labelsDiv","labelsSeparateLines","labelsShowZeroValues","labelsKMB","labelsKMG2","showLabelsOnHighlight","hideOverlayOnMouseOut","includeZero","xRangePad","yRangePad","ylabel","yLabelWidth","plotter","smoothPlotter","strokeWidth","strokePattern","drawPoints","drawGapEdgePoints","connectSeparatedPoints","pointSize","stepPlot","strokeBorderColor","strokeBorderWidth","fillGraph","fillAlpha","stackedGraph","stackedGraphNaNFill","drawAxis","axisLabelFontSize","axisLineColor","axisLineWidth","drawGrid","gridLinePattern","gridLineWidth","gridLineColor","maxNumberWidth","sigFigs","digitsAfterDecimal","highlightSeriesOpts","highlightSeriesBackgroundAlpha","visibility","logscale","axes","pixelsPerLabel","ticker","Dygraph","dateTicker","axisLabelWidth","axisLabelFormatter","toTimeString","axes_","extremeRange","DygraphChart","chartElementClassName","chartElementId","onUpdateChartPanAndZoom","immediatelyDispatchPanAndZoom","setGlobalChartUnderlay","setHoveredX","viewAfter","selectedAlarm","updateChartPanOrZoom","shouldNotExceedAvailableRange","dygraphInstance","latestIsUserAction","isMouseDown","dygraphHighlightAfter","dygraphLastTouchMove","dygraphLastTouchPageX","dygraphLastTouchEnd","isSyncPanAndZoom","resetGlobalPanAndZoom","updateOptions","dateWindow","useDygraphBadge","isAlarmBadgeVisible","alarmBadgeRef","updateAlarmBadge","isHighlightBadgeVisible","highlightBadgeRef","updateHighlightBadge","isProceeded","precededChartRef","updatePrecededPosition","useLayoutEffect","localHighlight","setLocalHighlight","dygraphOptionsStatic","dygraphOptions","highlightCallback","xval","newHoveredX","unhighlightCallback","drawCallback","xRange","xAxisRange","last_entry","isInRangeOfAvailableData","zoomCallback","minDate","maxDate","underlayCallback","canvas","area","currentAlarm","alarmPosition","fillColor","requestAnimationFrame","fillStyle","globalAlphaCache","globalAlpha","fillRect","hasHashParam","pillRef","pillX","pillPosition","bottomLeft","toDomCoords","topRight","interactionModel","mousedown","button","initializeMouseDown","tarp","tarps","isOutsideReasonableViewport","startPan","metaKey","toDataXCoord","offsetX","startZoom","mousemove","moveZoom","isPanning","is2DPan","movePan","isZooming","mouseup","sortedRange","clearZoomRect_","drawGraph_","endPan","endZoom","wheel","adjustAxis","zoomInPercentage","bias","increment","foo","normalDef","wheelDelta","deltaY","detail","percentages","offsetY","yar0","yAxisRange","toDomYCoord","offsetToPercentage","xPct","yPct","xBias","yBias","yAxes","yAxisRanges","newYAxes","zoomRange","updatedAfter","updatedBefore","dblclick","touchstart","defaultInteractionModel","touchDirections","pageX","touchmove","touchend","dygraphPlotter","plotter_","pct","double_click_speed","instance","useUpdateEffect","forceDateWindow","hasChangedDuration","hasScrolledToTheFutureDuringPlayMode","optionsDateWindow","getSelection","clearSelection","setSelection","commonMinState","commonMaxState","extremes","yAxisExtremes","shouldUseCommonMin","shouldUseCommonMax","shouldUpdate","newExtremes","useUnmount","resizeObserver","useMount","hasOmitedFirstCallback","callbackDebounced","waitFor","clearTimeout","debounce","ResizeObserver","observe","disconnect","EasyPieChart","chartWidth","chartInstance","setChartInstance","valueIndex","safeMinMax","_min","_max","isMinOverride","isMaxOverride","getPercentFromValueMinMax","stroke","v","easypiechart_track","easypiechart_scale","newChartInstance","EasyPie","barColor","trackColor","scaleColor","scaleLength","lineCap","lineWidth","trackWidth","easing","shouldUseAnimation","enableAnimation","disableAnimation","valueFontSize","valuetop","titleFontSize","titletop","unitFontSize","unitTop","isSetByUser","GaugeChart","chartCanvasElement","minAttribute","maxAttribute","safeMin","safeMax","_pcent","gauge_pointer","gauge_stroke","radiusScale","pointer","limitMax","limitMin","colorStart","colorStop","strokeColor","generateGradient","gradientType","highDpiSupport","Gauge","setOptions","minValue","maxValue","animationSpeed","set","valueTop","minMaxFontSize","normalizeHex","colorLuminance","hexNormalized","splitEvery","nr","convertToTimestamp","number","SparklineChart","viewAfterForCurrentData","viewBeforeForCurrentData","$chartElement","set$chartElement","sparklineOptions","requestedAfter","requestedBefore","currentDuration","requestedDuration","widthRatio","paddingLeftPercentage","getForceTimeWindowCorrection","defaultFillColor","fill_luminance","chartTitle","emptyStringIfDisable","sparklineInitOptions","lineColor","chartRangeMin","chartRangeMax","composite","enableTagOptions","tagOptionPrefix","tagValuesAttribute","disableHiddenCheck","defaultPixelsPerValue","spotColor","minSpotColor","maxSpotColor","spotRadius","valueSpots","highlightSpotColor","highlightLineColor","normalRangeMin","normalRangeMax","drawNormalOnTop","xvalues","chartRangeClip","chartRangeMinX","chartRangeMaxX","disableInteraction","disableTooltips","disableHighlight","highlightLighten","highlightColor","tooltipContainer","tooltipClassname","tooltipChartTitle","tooltipFormat","tooltipPrefix","tooltipSuffix","tooltipSkipNull","tooltipValueLookups","tooltipFormatFieldlist","tooltipFormatFieldlistKey","numberFormatter","numberDigitGroupSep","numberDecimalMark","numberDigitGroupCount","animatedZooms","onLeave","onChange","sparklines","getCurrentRegionFields","bind","unbind","textAlign","paddingLeft","fetchPromise","emptyContent","getDateRange","dt","dtString","t1","t2","D3pieChart","d3pieInstance","setD3pieInstance","d3pieOptions","safeContent","defaultTitle","dateRange","other","mainlabel","segment_stroke","gradient_color","initialD3pieOptions","tooltip_bg","tooltip_fg","newD3pieInstance","isHoveredButNoData","slot","PeityChart","peityOptions","$element","peityInitOptions","foreground","updatedOptions","GoogleChart","googleChartInstance","hasApiBeenLoaded","setHasApiBeenLoaded","script","firstScript","packages","googleOptions","dataTable","visualization","DataTable","draw","chartType","areaOpacity","Map","initialGoogleOptions","hAxis","viewWindowMode","slantedText","textStyle","gridlines","vAxis","chartArea","focusTarget","annotation","1","pointsVisible","titlePosition","titleTextStyle","isHtml","ignoreBounds","curveType","isStacked","googleInstance","AreaChart","LineChart","TextOnly","precision","textContent","defaultAspectRatio","getCellBoxSize","cellSize","getRows","getColumns","rows","getXPosition","getYPosition","getFullWidth","ceil","getFullHeight","getOffsetPosition","onMouseenter","onMouseout","cellPadding","hoveredIndex","getEvent","rect","cellBoxSize","mouseout","nextHoveredIndex","getWidth","getCanvasAttributes","defaultColorRange","makeGetColor","colorRange","scaleLinear","domain","extent","range","innerHeight","aligns","GroupBox","renderTooltip","dataRef","canvasRef","boxesRef","hover","setHover","dropHoverRef","boxHoverRef","timeoutId","close","deactivateBox","closeDrop","currentHover","cellStroke","getContext","activeBox","activateBox","clearEvents","clear","clearRect","beginPath","drawBox","registerEvents","strokeStyle","strokeRect","drawBoxes","onMouseEnter","onMouseLeave","getAlign","Title","Label","Flex","attrs","as","TextMicro","gap","GroupBoxWrapper","groupIndex","renderGroupPopover","renderBoxPopover","maxWidth","boxPopover","boxAlign","groupPopover","column","alignItems","margin","plain","isOpen","popoverRef","strong","GroupBoxes","flexWrap","vertical","flex","LinearColorScaleBar","Legend","k8s_cluster_id","k8s_node_name","k8s_namespace","k8s_controller_kind","k8s_controller_name","k8s_pod_name","k8s_container_name","labelIds","word","toUpperCase","Separator","Header","wordBreak","TabButton","flavour","neutral","themeType","disabled","Tabs","ExpandButton","makeFlex","Section","onExpand","noBorder","side","justifyContent","oldDefaultHeights","getPortalNodeStyles","shouldAddSpecialHeight","heightFromLocalStorage","heightID","persitedHeight","persistedHeightOld","getHeightFromLocalStorage","heightOverriden","chartDefaultsMinWidth","min_width","minWidth","globalIntersectionOptions","root","rootMargin","threshold","globalIntersectionObserver","listeners","globalObserver","IntersectionObserver","entries","isIntersecting","unsubscribe","elementToUnsubscribe","createGlobalIntersectionObserver","InvisibleSearchableText","opacity","shouldCleanChartStateAlways","DisableOutOfView","portalNode","hasPortalNodeBeenStyled","setHasPortalNodeBeenStyled","isShowingAlarmOnChart","forEachObjIndexed","styleName","setProperty","destroyOnHide","clonedChildrenRef","isVisibleIntersection","setIsVisible","isVisibleRef","newIsVisible","useCommonIntersection","debounceTime","shouldHideDebounced","setShouldHideDebounced","useDebounce","shouldHide","previousIsVisibleIntersection","newClonedChildren","child","cloned","cloneNode","clonedCanvases","querySelectorAll","oldCanvas","newCanvas","drawImage","cloneWithCanvas","clonedChildrenContainer","nodeElement","ChartContainer","dropdownMenu","renderCustomElementForDygraph","onAttributesChange","externalChartMetadata","sectionTitle","aggrMethods","avg","ChartValueContainer","memo","displayedIndex","aggregation","getAggregation","ChartValue","dangerouslySetInnerHTML","__html","groupLabel","postGroupLabel","relatedIndex","useContext","ThemeContext","chartContainerRef","setDisplayedIndex","setDisplayedIndexThrottled","throttle","repaint","relatedCharts","relatedChartAttributes","chartAttributes","chartLabels","ExternalButton","alignSelf","Item","secondary","DateItem","DateSection","Metrics","LabelsSection","labelId","items","onItemClick","getLabel","sliced","expandable","onNodeClick","ids","predefinedLabelIds","getLabelIds","StyledButton","List","onBack","horizontal","TabsContainer","Popover","setView","isLabelView","Kubernetes","labelValues","postGroupValues","postGroupData","groupValue","indexes","boxes","labelsAcc","groupData","groupChartLabels","groupLabels","Set","accChartLabels","transform","groupBoxData","groupedBoxesData","groupedBox","AbstractChart","showValueAttributesNodes","userElementId","chartSettingCallOptions","isFlipped","dimensionIndex","useShowValueOutside","Chart","viewRangeForCurrentData","themeContext","unitsScalingMethod","shouldDisplayToolbox","legend_toolbox","shouldDisplayResizeHandler","resize_charts","allDimensionNames","dimensionNamesFromMetadata","additionalDimensionNamesFromData","localHoveredX","setLocalHoveredX","isSyncSelection","handleSetHoveredX","noMaster","globalHoveredX","netdataFirst","netdataLast","fixedMinDuration","setGlobalPanAndZoomDebounced","useDebouncedCallback","newGlobalPanAndZoom","flush","handleUpdateChartPanAndZoom","shouldFlushImmediately","minDuration","currentDuraton","afterForced","beforeForced","first","wantedDuration","doCallback","tolerance","movement","handleToolBoxPanAndZoom","newAfter","newBefore","handleToolboxLeftClick","handleToolboxRightClick","timeWindow","handleToolboxZoomInClick","panAndZoomStep","handleToolboxZoomOutClick","selectAssignedColors","__","isTimeVisible","DropdownItem","DropdownItemLabel","DotsBtn","ChartDropdown","setIsOpen","handleClose","onClose","circleAnimation","keyframes","SpinnerContainer","Circle","Circle2","Circle3","ChartSpinner","spaceBetween","ChartDropdownContainer","dimensionsAggrMethodMap","ChartWithLoader","selectChartMetadataRequest","actualChartMetadata","panAndZoom","isPanAndZoomMaster","areCriteriaMet","preferedIntervalTime","stopUpdatesWhenFocusIsLost","shouldBeUpdating","shouldFetch","setShouldFetch","shouldFetchImmediatelyAfterFocus","setShouldFetchImmediatelyAfterFocus","intervalTime","useInterval","useFetchNewDataClock","panAndZoomThrottled","useThrottle","initialBefore","liveModeAfter","boundingClientRect","isShowingSnapshot","shouldUsePanAndZoomPadding","CancelToken","cancel","shouldShowSpinnerDebounced","setShouldShowSpinnerDebounced","shouldShowSpinner","newViewRange","forceDataPoints","force_data_points","pointsMultiplier","requestedPadding","pixelsPerPointAttribute","pixelsPerPointSetting","pixels_per_point","px","getChartPixelsPerPoint","correctedPoints","firstEntry","nowInSeconds","afterAbsolute","beforeAbsolute","requestedRange","availableRange","getCorrectedPoints","externalSelectedDimensions","customElementForDygraph","selectDashboardDomain","selectIsSnapshotMode","selectSnapshotOptions","SnapshotLoader","SnapshotLoaderContainer","Portals","nodes","attributesMapped","createPortal","useHttp","shouldMakeCall","isExternal","setIsFetching","isError","setIsError","setData","modalRoot","ModalPortal","PrintModal","printModalElement","amountOfCharts","amountOfFetchedCharts","nameOfAnyFetchingChart","print","progressBarText","aria-labelledby","data-keyboard","data-backdrop","data-dismiss","aria-label","aria-hidden","aria-valuenow","aria-valuemin","aria-valuemax","SocialMediaContainer","FirstRow","GithubCopy","GithubCopyLine","SocialMediaLink","GithubStarQuestion","GithubIcon","TwitterIcon","FacebookIcon","SecondRow","SecondRowText","SidebarSocialMedia","SidebarSocialMediaPortal","NotificationsContainer","closeButton","hasBorder","hostNameSelector","Node","truncate","tooltipBackground","CustomTooltip","isBasic","getContent","contentNode","Tooltip","getTooltipContent","Options","data-toggle","data-target","Dropdown","PillContainer","Link","ProtoBuf","toggle","lacksProtoBufSupport","isLargeEnough","useMedia","onEsc","onClickOutside","VersionControl","currentVersion","isStableReleaseChannel","releaseChannel","githubVersion","gcsVersionResponse","mediaLinkResponse","latestVersion","transformGcsVersionResponse","isNewVersionAvailable","small","versionSelector","Version","initialValue","setToggle","toggleOn","toggleOff","getValueFromStorage","useLocalStorage","setValue","RootContainer","DropdownContainer","Menu","ListContainer","OpenerIcon","noMargin","PickerBox","StyledTimePeriod","StyledCustomTimePeriod","StyledDropdown","renderTitle","onMenuToggle","anchorCorner","renderOpener","maxHeight","DropdownIcon","CustomInput","input","StyledDrop","Drop","StyledHR","hr","period","resolution","setTimeRange","tagging","data-ga","dateResolutions","resolutionsMapping","MINUTE","HOUR","months","getCustomTimePeriod","parseInputPeriod","timeCorrection","customRange","getUnixTime","focusTaggingMap","startDate","endDate","timePeriods","getDateWithOffset","formattedDate","isMatch","splitOffset","mathSign","absoluteNumber","firstPart","padStart","padEnd","formatOffset","TimePeriods","handleTimePeriodChange","selectedDate","CustomTimePeriod","getInputValue","inputValue","setInputValue","isDropdownOpen","toggleDropdown","onBlur","currentValue","currentTarget","isValidInput","isInteger","timePeriod","isValid","onChangeResolution","newResolution","dateResolution","DatePicker","selected","selectsStart","selectsEnd","startOpen","inline","selectsRange","monthsShown","showPopperArrow","calendarContainer","StyledDateInput","StyledCalendar","getRgbColor","DatePickerInput","onDatesChange","onFocus","placeholderText","setFormattedValue","parsedDate","getTime","useLocaleDate","convertTimestampToDate","getLocaleDate","toDate","useConvertedDates","DatePickerWrapper","setStartDate","setEndDate","onInputFocus","convertedStartDate","convertedEndDate","setValidStartDate","setPreviousValue","isBefore","setValidEndDate","dates","startDateWithOffset","endDateWithOffset","startDateTimestamp","endDateTimestamp","grow","PeriodIndication","convertedStart","convertedEnd","formattedStartDate","formattedEndDate","formatDates","formatDistanceStrict","getTimePeriod","whiteSpace","resolutionMap","SECONDS","getDuration","moment","diff","getGranularDuration","showSeconds","getResolution","DateBox","isPlaying","isSameDate","DurationBox","PickerAccessorElement","isPickerOpen","setRangeValues","timeframe","setTimeframe","getStartDate","getEndDate","useDashboardSelector","isSame","getIsSameDate","DatePickerDrop","initialStartDate","initialEndDate","setResolution","focusedInput","setFocusedInput","setDates","clearChanges","togglePicker","focusTagging","getFocusTagging","isValidTimePeriod","isApplyDisabled","consistentDefaultValue","isClearDisabled","pickerDrop","canHideTarget","eventCategory","eventAction","eventLabel","eventValue","dataLayer","eventData","reportEvent","ReduxDatePickerContainer","dashboardDispatch","useDashboardDispatch","isGlobalPanAndZoom","pickedValues","getHoverColor","StyledPill","Pill","PlayPausePill","isForcePlaying","getIcon","PanelRowContainer","MenuItem","Wrapper","testid","actions","basis","DefaultListHeader","H4","SectionHandle","toggleOpen","ItemsList","PlayOptionsTooltip","bacgkround","MenuButton","MemoizedPlayOptions","GlobalControls","hollowColors","hollow","pillProps","Alarms","News","app","upToDate","SearchInput","TextInput","Search","inputRef","metaShrinked","OffsetItem","onSelect","timezones","abbr","getDefaultTimezone","memoized","timeZoneName","normalizedOffset","parsedOffset","normalizeOffset","digitizedOffset","digitizeOffset","timezoneList","byId","Timezone","selectedTimezone","selectedOffset","timezoneHash","zones","isRegistrySelector","offlineSelector","dashboard","SignIn","hasSignedInBefore","signInUrl","isRegistry","redirectURI","onSignIn","sendToChildIframe","htmlIframeElement","contentWindow","postMessage","useListenToPostMessage","messageType","defaultState","lastMessage","setLastMessage","handleMessage","resetMesssage","IframeContainer","Iframe","signedIn","rendered","setRendered","signInMsg","lsValue","removeLsValue","nameParam","originParam","signInIframeUrl","onLoad","useCheckSignInStatus","setHasSignedInBefore","onMessage","isNew","zIndex","SignOut","SignInItem","isSignedInSelector","UserSettings","menuItems","separator","DarkTheme","backdrop","SpacesSkeleton","Fragment","SpacesIframe","NetdataLogo","viewBox","xmlns","Spaces","cloudEnabled","getNodeUrl","baseUrl","getNodes","hostsStatus","base","decodeURI","getBaseUrl","replicatedNodes","Anchor","StyledIcon","ReplicatedNodes","listOpen","setListOpen","toggleListOpen","iconLeft","SpacePanelIframe","spacePanelMessage","promptContent","signIn","signUp","SignInPrompt","NoNetwork","fillRule","clipRule","OfflinePrompt","replicatedNodesSelector","visitedNodesSelector","visitedNodes","globalRegistry","switchIdentity","persist","pointerEvents","setLsValue","Layout","printMode","mapTheme","slate","white","DefaultTheme","App","useStore","refreshHelper","setRefreshHelper","haveDOMReadyForParsing","loadOverlay","shouldUseRegistry","useRegistry","shouldUseAlarms","useAlarms","shouldUseInfo","useInfo","hasFetchDependencies","setHasFetchDependencies","bootstrap_css","dashboard_css","useChartsMetadata","alarmWhen","alarmTime","alarmChart","alarmValue","useAlarmFromUrl","ReactDOM","render","module","exports","require","code","f","fun","nextTick","apply","browser","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","binding","cwd","chdir","umask","2","defineProperty","__esModule","extractSeries","rollingAverage","3","pow","4","5","onPointsCreated_","y_top","NaN","y_bottom","yval_minus","yval_plus","getExtremeYValues","onLineEvaluated","calcYNormal_","6","X","Y","EXTRAS","seriesToPoints","yval","canvasx","canvasy","7","8","9","dygraph_","layout","elementContext","height_","width_","isCanvasSupported","getPlotArea","canvas_ctx_","clip","hidden_ctx_","_updatePoints","_renderLineChart","_getIteratorPredicate","_predicateThatSkipsEmptyPoints","_drawStyledLine","getBooleanOption","setName","isArrayLike","createIterator","drawingContext","setLineDash","_drawSeries","_drawPointsOnLine","restore","array_","end_","predicate_","start_","moveTo","lineTo","nextIdx_","hasNext","peek","setNames","colorsMap_","axisPropertiesForSeries","plotArea","seriesIndex","seriesCount","singleSeriesName","allSeriesPoints","_Plotters","linePlotter","_linePlotter","fillPlotter","_fillPlotter","errorPlotter","_errorPlotter","getNumericOption","Circles","DEFAULT","toRGB_","closePath","_fastCanvasProxy","splice","_count","getLabels","getColors","A","minyval","yscale","O","D","E","L","S","P","C","M","FORCE_FAST_PROXY","N","F","isOK","k","y_stacked","10","highlightSeriesBackgroundColor","axisTickSize","xValueParser","delimiter","sigma","errorBars","fractions","wilsonInterval","customBars","drawAxesAtZero","xLabelHeight","defaultModel","rangeSelectorHeight","rangeSelectorPlotStrokeColor","rangeSelectorPlotFillGradientColor","rangeSelectorPlotFillColor","rangeSelectorBackgroundStrokeColor","rangeSelectorBackgroundLineWidth","rangeSelectorPlotLineWidth","rangeSelectorForegroundStrokeColor","rangeSelectorForegroundLineWidth","rangeSelectorAlpha","showInRangeSelector","plugins","dateAxisLabelFormatter","valueFormatter","dateValueFormatter","independentTicks","numberValueFormatter","numberAxisLabelFormatter","numericTicks","11","date_graph","layout_","12","dragEndX","dragGetX_","dragEndY","dragGetY_","dragStartX","dragStartY","lastx_","treatMouseOpAsClick","regionWidth","regionHeight","getOptionForAxis","initialLeftmostDate","log10","xUnitsPerPixel","xAxisExtremes","boundedDates","toDataYCoord","boundedValues","attributes_","getForAxis","initialTopValue","dragValueRange","unitsPerPixel","dateWindow_","LOG_SCALE","maybeTreatMouseOpAsClick","zoomMoved","dragDirection","VERTICAL","HORIZONTAL","drawZoomRect_","prevDragDirection","prevEndX","prevEndY","getFunctionOption","MAX_VALUE","selPoints_","cancelable","cascadeEvents_","pts","doZoomX_","cancelNextDblclick","doZoomY_","startTouch","startTimeForDoubleTapMs","pageY","dataX","dataY","initialTouches","initialPinchCenter","initialRange","moveTouch","endTouch","changedTouches","doubleTapX","screenX","doubleTapY","screenY","resetZoom","findPos","canvas_","offsetWidth","offsetHeight","addAndTrackEvent","removeEvent","willDestroyContextMyself","nonInteractiveModel_","dragIsPanInteractionModel","13","annotations","yAxes_","xTicks_","yTicks_","addDataset","area_","computePlotArea","chart_div","graphDiv","reserveSpaceLeft","reserveSpaceRight","reserveSpaceTop","reserveSpaceBottom","chartRect","setAnnotations","setXTicks","setYAxes","evaluate","_xAxis","_evaluateLimits","_evaluateLineCharts","_evaluateLineTicks","_evaluateAnnotations","minval","maxval","xlogrange","xlogscale","computedValueRange","maxyval","yrange","ylogrange","ylogscale","calcXNormal_","getForSeries","yval_stacked","dataHandler_","xticks","label_v","toPercentXCoord","pos","has_tick","yticks","toPercentYCoord","series","annotated_points","removeAllDatasets","setPointsLengths","setPointsOffsets","14","_process","15","xAxis_","series_","global_","attrs_","user_","user_attrs_","labels_","highlightSeries_","reparseSeries","AXIS_STRING_MAPPINGS_","y1","Y1","Y2","axisToIndex_","yAxis","getGlobalUser_","getGlobalDefault_","getHighlightSeries","numAxes","axisForSeries","axisOptions","seriesForAxis","seriesNames","16","numericLinearTicks","binarySearch","tickValue","pixel_coord","MILLISECONDLY","TWO_MILLISECONDLY","FIVE_MILLISECONDLY","TEN_MILLISECONDLY","FIFTY_MILLISECONDLY","HUNDRED_MILLISECONDLY","FIVE_HUNDRED_MILLISECONDLY","SECONDLY","TWO_SECONDLY","FIVE_SECONDLY","TEN_SECONDLY","THIRTY_SECONDLY","MINUTELY","TWO_MINUTELY","FIVE_MINUTELY","TEN_MINUTELY","THIRTY_MINUTELY","HOURLY","TWO_HOURLY","SIX_HOURLY","DAILY","TWO_DAILY","WEEKLY","MONTHLY","QUARTERLY","BIANNUAL","ANNUAL","DECADAL","CENTENNIAL","NUM_GRANULARITIES","Granularity","datefield","spacing","DateAccessorsUTC","DateAccessorsLocal","getMilliseconds","getDay","makeDate","getDateAxis","17","toExponential","toPrecision","nt","rt","ot","st","cancelEvent","cancelBubble","returnValue","hsvToRGB","documentElement","pageXOffset","scrollLeft","pageYOffset","py","isValidPoint","floatFormat","hmsString_","dateString_","round_","dateParser","dateStrToMillis","updateDeep","nodeName","isDateLike","createCanvas","getContextPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","Iterator","repeatAndCleanup","et","isPixelChangingOptionList","at","detectLineDelimiter","isNodeContainedBy","getComputedStyle","parseFloat_","G","lt","W","LN_TEN","U","logRangeFraction","DOTTED_LINE","DASHED_LINE","DOT_DASH_LINE","addEvent","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getUTCDay","UTC","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","requestAnimFrame","annotationClickHandler","annotationDblClickHandler","annotationMouseOutHandler","annotationMouseOverHandler","clickCallback","drawHighlightPointCallback","drawPointCallback","panEdgeFraction","pixelsPerYLabel","pointClickCallback","it","18","Symbol","iterator","return","TypeError","R","H","Z","Q","__init__","NAME","VERSION","DEFAULT_ROLL_PERIOD","DEFAULT_WIDTH","DEFAULT_HEIGHT","ANIMATION_STEPS","ANIMATION_DURATION","Plotters","addedAnnotationCSS","is_initial_draw_","readyFns_","copyUserAttrs_","maindiv_","file_","rollPeriod_","rollPeriod","previousVerticalX_","fractions_","annotations_","boundaryIds_","setIndexByName_","datasetIndex_","registeredEvents_","eventListeners_","createInterface_","plugins_","PLUGINS","plugin","activate","events","pluginOptions","createDragInterface_","defaultPrevented","propagationStopped","getPluginInstance_","isZoomed","attr_","getStringOption","optionsViewForAxis_","numRows","rawData_","gatherDatasets_","rolledSeries_","computeYAxisRanges_","toDataCoords","numColumns","getValue","hidden_","createPlotKitCanvas_","resizeElements_","mouseEventElement_","createMouseEventElement_","mouseMoveHandler_","mouseMove_","mouseOutHandler_","fromElement","relatedTarget","toElement","mouseOut_","resizeHandler_","removeTrackedEvents_","hasChildNodes","firstChild","setColors_","colors_","getPropertiesForSeries","createRollInterface_","roller_","onchange","adjustRoll","cover","draggingDate","draggingValue","uncover","currentZoomRectArgs_","doZoomXDates_","doAnimatedZoom","zoomAnimationFunction","eventToDomCoords","findClosestRow","findClosestPoint","seriesName","findStackedPoint","getLeftBoundary_","isSeriesLocked","lastRow_","highlightSet_","animateSelection_","fadeLevel","animateId","updateSelection_","selectedRow","selectedX","selectedPoints","lockedSet_","loadedEvent_","parseCSV_","cascadeDataDidUpdateEvent_","predraw_","addXTicks_","getHandlerClass_","computeYAxes_","drawingTimeMs_","PointType","stackPoints_","boundaryIds","renderGraph_","readyFired_","detectTypeFromString_","setXAxisOptions_","parseArray_","parseDataTable_","getNumberOfColumns","getNumberOfRows","getColumnType","getColumnLabel","shortText","fromCharCode","getColumnRange","XMLHttpRequest","ActiveXObject","onreadystatechange","readyState","responseText","send","resize_lock","setVisibility","indexFromSetName","getRowForX","ready","elem","GVizChart","nonInteractiveModel","Plugins","Axes","Annotations","ChartLabels","Grid","RangeSelector","DataHandlers","DefaultHandler","BarsHandler","CustomBarsHandler","DefaultFractionHandler","ErrorBarsHandler","FractionsBarsHandler","19","20","clearChart","didDrawChart","detachLabels","tickHeight","cssClass","createTextNode","attachAtBottom","borderColor","tickColor","tickWidth","21","xlabels_","ylabels_","willDrawChart","22","title_div_","xlabel_div_","ylabel_div_","y2label_div_","detachLabels_","23","24","legend_div_","is_generated_div_","one_em_width_","deselect","predraw","generateLegendHTML","dashHTML","labelHTML","xHTML","yHTML","isHighlighted","defaultFormatter","25","hasTouchInterface_","TouchEvent","isMobileDevice_","appVersion","interfaceCreated_","getOption_","reserveSpace_","renderStaticLayer_","renderInteractiveLayer_","bgcanvas_","fgcanvas_","leftZoomHandle_","rightZoomHandle_","setDefaultOption_","createCanvases_","createZoomHandles_","initInteraction_","addToGraph_","graphDiv_","removeFromGraph_","updateVisibility_","resize_","drawStaticLayer_","isChangingRange_","placeZoomHandles_","drawInteractiveLayer_","canvasRect_","bgcanvas_ctx_","fgcanvas_ctx_","cursor","Image","leftHandlePos","rightHandlePos","clientX","srcElement","getZoomHandleStatus_","targetTouches","opera","drawMiniPlot_","computeCombinedSeriesAndLimits_","yMax","yMin","createLinearGradient","addColorStop","MIN_VALUE","withContext","collected","viewed","enabledDimensions","isCurrentlySelected","fragmentParamsSeparatorRegEx","param","makeHashFromObject","allParams","allParamsResult","mergeDeepLeft","excludedParams","filteredParams","getFilteredHash","process","useSelectorOriginal","useDispatchOriginal","assign","meta"],"mappings":"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C,oBAAqB,qBAE7B,CACE7qB,MAAO,yBACP8tG,KAAM,MACN9uE,KAAM,8BACNnU,IAAK,CACH,gBACA,wBACA,iBACA,mBACA,iBACA,kBACA,sBACA,YAGJ,CACE7qB,MAAO,gCACP8tG,KAAM,OACN9uE,KAAM,kBACNnU,IAAK,CACH,iBACA,qBACA,sBACA,oBACA,kBACA,sBACA,YACA,sBAGJ,CACE7qB,MAAO,wBACP8tG,KAAM,MACN9uE,KAAM,6BACNnU,IAAK,CACH,kBACA,uBACA,4BACA,oBACA,oBACA,8BACA,8BACA,iCACA,sBACA,uBACA,mBACA,mBACA,YAGJ,CACE7qB,MAAO,iCACP8tG,KAAM,MACN9uE,KAAM,sCACNnU,IAAK,CACH,yBACA,iBACA,iBACA,sBACA,sBAGJ,CACE7qB,MAAO,+BACP8tG,KAAM,OACN9uE,KAAM,eACNnU,IAAK,CAAC,iBAAkB,0BAE1B,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,sBACNnU,IAAK,CACH,iBACA,iBACA,wBACA,mBACA,oBACA,kBACA,eACA,iBACA,qBACA,cAGJ,CACE7qB,MAAO,wBACP8tG,KAAM,MACN9uE,KAAM,6BACNnU,IAAK,CACH,kBACA,iBACA,6BACA,4BACA,0BACA,kBACA,8BACA,qBACA,mBACA,iBACA,mBACA,kBACA,sBACA,yBACA,sBACA,kBACA,YAGJ,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,iBACNnU,IAAK,CAAC,0BAA2B,wBAAyB,yBAE5D,CACE7qB,MAAO,0BACP8tG,KAAM,MACN9uE,KAAM,UACNnU,IAAK,CAAC,oBAER,CACE7qB,MAAO,yBACP8tG,KAAM,MACN9uE,KAAM,WACNnU,IAAK,CAAC,qBAER,CACE7qB,MAAO,yBACP8tG,KAAM,MACN9uE,KAAM,yBACNnU,IAAK,CACH,oBACA,oBACA,kBACA,kBACA,gBACA,qBAGJ,CACE7qB,MAAO,kCACP8tG,KAAM,OACN9uE,KAAM,SACNnU,IAAK,CAAC,uBAAwB,mBAEhC,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,uCACNnU,IAAK,CACH,mBACA,kBACA,gBACA,mBACA,uBACA,oBACA,kBACA,mBACA,qBACA,kBACA,qBACA,iBACA,qBACA,iBACA,wBACA,iBACA,kBACA,qBACA,qBACA,wBACA,sBACA,sBACA,wBACA,wBACA,mBACA,mBACA,oBACA,qBACA,kBACA,cAGJ,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,WACNnU,IAAK,CAAC,mBAAoB,sBAE5B,CACE7qB,MAAO,6BACP8tG,KAAM,MACN9uE,KAAM,eACNnU,IAAK,CAAC,qBAER,CACE7qB,MAAO,iCACP8tG,KAAM,QACN9uE,KAAM,WACNnU,IAAK,CAAC,sBAER,CACE7qB,MAAO,0BACP8tG,KAAM,MACN9uE,KAAM,eACNnU,IAAK,CACH,6BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,uBACA,oBACA,kBACA,gBACA,oBAGJ,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,qBACNnU,IAAK,CACH,oBACA,gBACA,kBACA,oBACA,iBACA,qBACA,iBACA,mBACA,qBACA,mBACA,cAGJ,CACE7qB,MAAO,0BACP8tG,KAAM,MACN9uE,KAAM,YACNnU,IAAK,CAAC,oBAER,CACE7qB,MAAO,2BACP8tG,KAAM,MACN9uE,KAAM,aACNnU,IAAK,CAAC,uBAER,CACE7qB,MAAO,sBACP8tG,KAAM,MACN9uE,KAAM,WACNnU,IAAK,CAAC,kBAER,CACE7qB,MAAO,SACP8tG,KAAM,IACN9uE,KAAM,gCACNnU,IAAK,CAAC,kBAAmB,yBAA0B,cAErD,CACE7qB,MAAO,6BACP8tG,KAAM,MACN9uE,KAAM,qBACNnU,IAAK,IAEP,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,SACNnU,IAAK,CAAC,uBAAwB,oBAEhC,CACE7qB,MAAO,2BACP8tG,KAAM,OACN9uE,KAAM,iBACNnU,IAAK,CAAC,sBAAuB,cAE/B,CACE7qB,MAAO,wBACP8tG,KAAM,MACN9uE,KAAM,aACNnU,IAAK,CAAC,oBAAqB,oBAE7B,CACE7qB,MAAO,MACP8tG,KAAM,MACN9uE,KAAM,6BACNnU,IAAK,CAAC,uBAAwB,YAEhC,CACE7qB,MAAO,oBACP8tG,KAAM,MACN9uE,KAAM,oBACNnU,IAAK,CAAC,qBAAsB,kBAAmB,gBAAiB,kBAElE,CACE7qB,MAAO,oBACP8tG,KAAM,MACN9uE,KAAM,iBACNnU,IAAK,CACH,kBACA,kBACA,mBACA,gBACA,kBAGJ,CACE7qB,MAAO,0BACP8tG,KAAM,MACN9uE,KAAM,sBACNnU,IAAK,CACH,iBACA,eACA,gBACA,gBACA,gBACA,iBACA,eACA,kBACA,cACA,kBACA,oBACA,qBACA,kBACA,qBACA,uBAGJ,CACE7qB,MAAO,0BACP8tG,KAAM,OACN9uE,KAAM,mDACNnU,IAAK,CACH,sBACA,mBACA,iBACA,gBACA,kBACA,mBACA,oBACA,eACA,gBACA,cACA,cACA,oBACA,mBACA,eACA,iBACA,gBACA,kBAGJ,CACE7qB,MAAO,+BACP8tG,KAAM,OACN9uE,KAAM,oDACNnU,IAAK,CACH,kBACA,oBACA,kBACA,mBACA,mBACA,gBACA,kBAGJ,CACE7qB,MAAO,wBACP8tG,KAAM,MACN9uE,KAAM,sCACNnU,IAAK,CAAC,eAAgB,kBAAmB,oBAAqB,gBAAiB,iBAEjF,CACE7qB,MAAO,iCACP8tG,KAAM,OACN9uE,KAAM,mCACNnU,IAAK,CAAC,kBAAmB,gBAAiB,gBAAiB,kBAE7D,CACE7qB,MAAO,kCACP8tG,KAAM,QACN9uE,KAAM,sBACNnU,IAAK,CACH,iBACA,gBACA,qBACA,gBACA,kBACA,eACA,oBACA,gBACA,gBACA,kBACA,gBACA,oBACA,eACA,cAGJ,CACE7qB,MAAO,wBACP8tG,KAAM,MACN9uE,KAAM,WACNnU,IAAK,CAAC,oBAER,CACE7qB,MAAO,oBACP8tG,KAAM,MACN9uE,KAAM,oBACNnU,IAAK,CAAC,eAAgB,gBAAiB,mBAAoB,oBAE7D,CACE7qB,MAAO,4BACP8tG,KAAM,OACN9uE,KAAM,SACNnU,IAAK,CAAC,gBAER,CACE7qB,MAAO,sBACP8tG,KAAM,MACN9uE,KAAM,QACNnU,IAAK,CAAC,iBAER,CACE7qB,MAAO,sBACP8tG,KAAM,MACN9uE,KAAM,WACNnU,IAAK,CAAC,kBAER,CACE7qB,MAAO,0BACP8tG,KAAM,OACN9uE,KAAM,YACNnU,IAAK,CACH,eACA,gBACA,mBACA,kBACA,kBACA,cACA,mBACA,iBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE7qB,MAAO,6BACP8tG,KAAM,OACN9uE,KAAM,mBACNnU,IAAK,CACH,kBACA,mBACA,kBACA,gBACA,sBACA,gBACA,oBACA,gBACA,gBACA,gBACA,iBACA,cAGJ,CACE7qB,MAAO,oBACP8tG,KAAM,MACN9uE,KAAM,gDACNnU,IAAK,CACH,kBACA,cACA,mBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,WACNnU,IAAK,CAAC,oBAER,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,YACNnU,IAAK,CAAC,mBAER,CACE7qB,MAAO,sBACP8tG,KAAM,MACN9uE,KAAM,UACNnU,IAAK,CAAC,mBAER,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,QACNnU,IAAK,CAAC,eAER,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,UACNnU,IAAK,CAAC,iBAER,CACE7qB,MAAO,4BACP8tG,KAAM,MACN9uE,KAAM,cACNnU,IAAK,CAAC,uBAER,CACE7qB,MAAO,qBACP8tG,KAAM,MACN9uE,KAAM,iBACNnU,IAAK,CAAC,YAAa,eAAgB,cAAe,aAAc,gBAElE,CACE7qB,MAAO,0BACP8tG,KAAM,OACN9uE,KAAM,UACNnU,IAAK,CACH,qBACA,gBACA,uBACA,kBACA,cACA,iBACA,kBACA,mBACA,iBACA,mBACA,YACA,sBACA,gBACA,mBAGJ,CACE7qB,MAAO,uBACP8tG,KAAM,MACN9uE,KAAM,2CACNnU,IAAK,CAAC,eAAgB,gBAAiB,oBAAqB,mBAAoB,iBAElF,CACE7qB,MAAO,cACP8tG,KAAM,OACN9uE,KAAM,6BACN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","file":"static/js/main.e3f3d31b.chunk.js","sourcesContent":["import { mergeAll, mergeRight } from \"ramda\"\nimport { LOCALSTORAGE_HEIGHT_KEY_PREFIX } from \"domains/chart/components/resize-handler\"\nimport { DashboardTheme } from \"utils/map-theme\"\n\nexport const SYNC_PAN_AND_ZOOM = \"sync_pan_and_zoom\"\nexport const STOP_UPDATES_WHEN_FOCUS_IS_LOST = \"stop_updates_when_focus_is_lost\"\nexport const DESTROY_ON_HIDE = \"destroy_on_hide\"\nexport const THEME = \"theme\"\nexport const LEGEND_RIGHT = \"legend_right\"\n\nexport const themeLocalStorageKey = \"netdataTheme\"\n\n/* eslint-disable camelcase */\n\nexport interface Options {\n // performance options\n [STOP_UPDATES_WHEN_FOCUS_IS_LOST]: boolean\n eliminate_zero_dimensions: boolean\n [DESTROY_ON_HIDE]: boolean\n async_on_scroll: boolean\n\n // synchronization options\n parallel_refresher: boolean\n concurrent_refreshes: boolean\n sync_selection: boolean\n [SYNC_PAN_AND_ZOOM]: boolean\n\n // visual options\n [LEGEND_RIGHT]: boolean\n [THEME]: DashboardTheme\n show_help: boolean\n pan_and_zoom_data_padding: boolean\n smooth_plot: boolean\n\n // locale options\n units: \"auto\" | \"original\"\n temperature: \"celsius\" | \"fahrenheit\"\n seconds_as_time: boolean\n timezone: string\n user_set_server_timezone: string\n utcOffset: number | string\n}\nexport type OptionsKey = keyof Options\n\n// those options have been created around 2015/2016 and some of them are not needed anymore\n// so we need to revisit them, test their impact, etc.\n\nexport const INITIAL_OPTIONS: Options = {\n // performance options\n\n // boolean - shall we stop auto-refreshes when document does not have user focus\n [STOP_UPDATES_WHEN_FOCUS_IS_LOST]: true,\n // do not show dimensions with just zeros\n eliminate_zero_dimensions: true,\n // destroy charts when they are not visible\n [DESTROY_ON_HIDE]: false, // eventually apply slow device detection\n async_on_scroll: false,\n\n // synchronization options\n // enable parallel refresh of charts\n parallel_refresher: true, // eventually apply slow device detection\n // when parallel_refresher is enabled, sync also the charts\n concurrent_refreshes: true,\n // enable or disable selection sync\n sync_selection: true,\n // enable or disable pan and zoom sync\n [SYNC_PAN_AND_ZOOM]: true,\n\n // visual options\n [LEGEND_RIGHT]: false,\n [THEME]: \"slate\",\n // when enabled the charts will show some help\n // when there's no bootstrap, we can't show it\n show_help: Boolean(window.netdataShowHelp) && !window.netdataNoBootstrap,\n // fetch more data for the master chart when panning or zooming\n pan_and_zoom_data_padding: true,\n // enable smooth plot, where possible\n smooth_plot: true, // eventually apply slow device detection\n\n // locale options\n units: \"auto\", // auto or original\n temperature: \"celsius\",\n seconds_as_time: true, // show seconds as DDd:HH:MM:SS ?\n timezone: \"default\", // the timezone to use, or 'default'\n user_set_server_timezone: \"default\", // as set by the user on the dashboard\n utcOffset: 0,\n}\n\nconst localStorageKeyToOption = <T extends string>(key: T) =>\n key.replace(/^options\\./, \"\").replace(themeLocalStorageKey, THEME)\n\nconst getItemFromLocalStorage = <T extends string>(key: T) => {\n const value = localStorage.getItem(key)\n // \"undefined\" (deliberate as a string) to support \"options.setOptionCallback\", an old property\n // used in old dashboard. users will still have it, so we need to support it for some time\n if (value === null || value === \"undefined\") {\n localStorage.removeItem(key)\n return null\n }\n let parsed\n try {\n parsed = JSON.parse(value)\n } catch (e) {\n // todo fix after main.js refactor\n // special case for netdataTheme, only this option is not boolean\n if (key === themeLocalStorageKey && value) {\n return value\n }\n\n console.log(`localStorage: failed to read \"${key}\", using default`) // eslint-disable-line no-console, max-len\n // it was not present in old dashboard, but it probably makes sense to remove broken values\n localStorage.removeItem(key)\n return null\n }\n return parsed\n}\n\nexport const getOptionsMergedWithLocalStorage = (): Options => {\n const optionsFromLocalStorage = Object.keys(localStorage)\n .filter(key => key.startsWith(\"options.\") || key === themeLocalStorageKey)\n .map(key => ({\n [localStorageKeyToOption(key)]: getItemFromLocalStorage(key),\n }))\n .filter(o => Object.values(o)[0] !== null)\n\n const overridenOptions = mergeAll(optionsFromLocalStorage) as unknown as Options\n return mergeRight(INITIAL_OPTIONS, overridenOptions)\n}\n\nexport const optionsMergedWithLocalStorage = getOptionsMergedWithLocalStorage()\nexport const initialLegendRight = optionsMergedWithLocalStorage[LEGEND_RIGHT]\n\nexport const clearLocalStorage = () => {\n const localStorageKeys = Object.keys(localStorage)\n localStorageKeys.forEach(key => {\n if (key.startsWith(LOCALSTORAGE_HEIGHT_KEY_PREFIX) || key.startsWith(\"options.\")) {\n localStorage.removeItem(key)\n }\n })\n}\n","const isPrintMode = window.location.hash.split(\";\").includes(\"help=true\")\n\nconst getIsDemo = () => {\n if (isPrintMode) {\n return false\n }\n const { hostname } = document.location\n return (\n hostname.endsWith(\".my-netdata.io\")\n || hostname.endsWith(\".mynetdata.io\")\n || hostname.endsWith(\".netdata.rocks\")\n || hostname.endsWith(\".netdata.ai\")\n || hostname.endsWith(\".netdata.live\")\n || hostname.endsWith(\".firehol.org\")\n || hostname.endsWith(\".netdata.online\")\n || hostname.endsWith(\".netdata.cloud\")\n )\n}\n\nexport const isDemo = getIsDemo()\n","export const zeropad = (x: number) => {\n if (x > -10 && x < 10) {\n return `0${x.toString()}`\n }\n return x.toString()\n}\n\ninterface ScalableUnits {\n [unitGroupName: string]: {\n [unitName: string]: number\n }\n}\n\nconst scalableUnits: ScalableUnits = {\n \"packets/s\": {\n pps: 1,\n Kpps: 1000,\n Mpps: 1000000,\n },\n pps: {\n pps: 1,\n Kpps: 1000,\n Mpps: 1000000,\n },\n \"kilobits/s\": {\n \"bits/s\": 1 / 1000,\n \"kilobits/s\": 1,\n \"megabits/s\": 1000,\n \"gigabits/s\": 1000000,\n \"terabits/s\": 1000000000,\n },\n \"bytes/s\": {\n \"bytes/s\": 1,\n \"kilobytes/s\": 1024,\n \"megabytes/s\": 1024 * 1024,\n \"gigabytes/s\": 1024 * 1024 * 1024,\n \"terabytes/s\": 1024 * 1024 * 1024 * 1024,\n },\n \"kilobytes/s\": {\n \"bytes/s\": 1 / 1024,\n \"kilobytes/s\": 1,\n \"megabytes/s\": 1024,\n \"gigabytes/s\": 1024 * 1024,\n \"terabytes/s\": 1024 * 1024 * 1024,\n },\n \"B/s\": {\n \"B/s\": 1,\n \"KiB/s\": 1024,\n \"MiB/s\": 1024 * 1024,\n \"GiB/s\": 1024 * 1024 * 1024,\n \"TiB/s\": 1024 * 1024 * 1024 * 1024,\n },\n \"KB/s\": {\n \"B/s\": 1 / 1024,\n \"KB/s\": 1,\n \"MB/s\": 1024,\n \"GB/s\": 1024 * 1024,\n \"TB/s\": 1024 * 1024 * 1024,\n },\n \"KiB/s\": {\n \"B/s\": 1 / 1024,\n \"KiB/s\": 1,\n \"MiB/s\": 1024,\n \"GiB/s\": 1024 * 1024,\n \"TiB/s\": 1024 * 1024 * 1024,\n },\n bytes: {\n bytes: 1,\n kilobytes: 1024,\n megabytes: 1024 * 1024,\n gigabytes: 1024 * 1024 * 1024,\n terabytes: 1024 * 1024 * 1024 * 1024,\n },\n Hz: {\n Hz: 1,\n kHz: 10 ** 3,\n MHz: 10 ** 6,\n GHz: 10 ** 9,\n THz: 10 ** 12,\n PHz: 10 ** 15,\n EHz: 10 ** 18,\n ZHz: 10 ** 21,\n },\n B: {\n B: 1,\n KiB: 1024,\n MiB: 1024 * 1024,\n GiB: 1024 * 1024 * 1024,\n TiB: 1024 * 1024 * 1024 * 1024,\n PiB: 1024 * 1024 * 1024 * 1024 * 1024,\n },\n KB: {\n B: 1 / 1024,\n KB: 1,\n MB: 1024,\n GB: 1024 * 1024,\n TB: 1024 * 1024 * 1024,\n },\n KiB: {\n B: 1 / 1024,\n KiB: 1,\n MiB: 1024,\n GiB: 1024 * 1024,\n TiB: 1024 * 1024 * 1024,\n },\n MB: {\n B: 1 / (1024 * 1024),\n KB: 1 / 1024,\n MB: 1,\n GB: 1024,\n TB: 1024 * 1024,\n PB: 1024 * 1024 * 1024,\n },\n MiB: {\n B: 1 / (1024 * 1024),\n KiB: 1 / 1024,\n MiB: 1,\n GiB: 1024,\n TiB: 1024 * 1024,\n PiB: 1024 * 1024 * 1024,\n },\n GB: {\n B: 1 / (1024 * 1024 * 1024),\n KB: 1 / (1024 * 1024),\n MB: 1 / 1024,\n GB: 1,\n TB: 1024,\n PB: 1024 * 1024,\n EB: 1024 * 1024 * 1024,\n },\n GiB: {\n B: 1 / (1024 * 1024 * 1024),\n KiB: 1 / (1024 * 1024),\n MiB: 1 / 1024,\n GiB: 1,\n TiB: 1024,\n PiB: 1024 * 1024,\n EiB: 1024 * 1024 * 1024,\n },\n /*\n 'milliseconds': {\n 'seconds': 1000\n },\n 'seconds': {\n 'milliseconds': 0.001,\n 'seconds': 1,\n 'minutes': 60,\n 'hours': 3600,\n 'days': 86400\n }\n */\n}\n\nlet currentTemperatureSetting: \"celsius\" | \"fahrenheit\"\nlet currentSecondsAsTimeSetting: boolean\ninterface ConvertibleUnits {\n [unitIn: string]: {\n [unitOut: string]: {\n check: ((number: number) => boolean) | (() => boolean)\n convert: (number: number) => number | string\n }\n }\n}\nconst convertibleUnits: ConvertibleUnits = {\n Celsius: {\n Fahrenheit: {\n // check(max) {\n check() {\n return currentTemperatureSetting === \"fahrenheit\"\n },\n convert(value: number) {\n return (value * 9) / 5 + 32\n },\n },\n },\n celsius: {\n fahrenheit: {\n // check(max) {\n check() {\n return currentTemperatureSetting === \"fahrenheit\"\n },\n convert(value: number) {\n return (value * 9) / 5 + 32\n },\n },\n },\n seconds: {\n time: {\n // check(max) {\n check() {\n return currentSecondsAsTimeSetting\n },\n convert(seconds: number) {\n // eslint-disable-next-line no-use-before-define\n return unitsConversionCreator.seconds2time(seconds)\n },\n },\n },\n milliseconds: {\n milliseconds: {\n check(max: number) {\n return currentSecondsAsTimeSetting && max < 1000\n },\n convert(milliseconds: number) {\n let tms = Math.round(milliseconds * 10)\n const millisecondsRet = Math.floor(tms / 10)\n\n tms -= millisecondsRet * 10\n\n return `${(millisecondsRet).toString()}.${tms.toString()}`\n },\n },\n seconds: {\n check(max: number) {\n return currentSecondsAsTimeSetting && max >= 1000 && max < 60000\n },\n convert(milliseconds: number) {\n let millisecondsReturn = Math.round(milliseconds)\n\n const seconds = Math.floor(millisecondsReturn / 1000)\n millisecondsReturn -= seconds * 1000\n\n millisecondsReturn = Math.round(millisecondsReturn / 10)\n\n return `${seconds.toString()}.${\n zeropad(millisecondsReturn)}`\n },\n },\n \"M:SS.ms\": {\n check(max) {\n return currentSecondsAsTimeSetting && max >= 60000\n },\n convert(milliseconds: number) {\n let millisecondsReturn = Math.round(milliseconds)\n\n const minutes = Math.floor(millisecondsReturn / 60000)\n millisecondsReturn -= minutes * 60000\n\n const seconds = Math.floor(millisecondsReturn / 1000)\n millisecondsReturn -= seconds * 1000\n\n millisecondsReturn = Math.round(millisecondsReturn / 10)\n\n return `${minutes.toString()}:${\n zeropad(seconds)}.${\n zeropad(millisecondsReturn)}`\n },\n },\n },\n}\n\nconst identity = (value: number) => value\n\ninterface Keys {\n [commonUnitsKey: string]: {\n [uuid: string]: {\n divider: number\n units: string\n }\n }\n}\ninterface Latest {\n [commonUnitsKey: string]: {\n divider: number\n units: string\n }\n}\nexport const unitsConversionCreator = {\n // todo lift the state\n keys: {} as Keys, // keys for data-common-units\n latest: {} as Latest, // latest selected units for data-common-units\n\n globalReset() {\n this.keys = {}\n this.latest = {}\n },\n\n seconds2time(seconds: number) {\n let secondsReturn = Math.abs(seconds)\n\n const days = Math.floor(secondsReturn / 86400)\n secondsReturn -= days * 86400\n\n const hours = Math.floor(secondsReturn / 3600)\n secondsReturn -= hours * 3600\n\n const minutes = Math.floor(secondsReturn / 60)\n secondsReturn -= minutes * 60\n\n secondsReturn = Math.round(secondsReturn)\n\n const msTxt = \"\"\n\n return `${((days > 0) ? `${days.toString()}d:` : \"\").toString()\n + zeropad(hours)}:${\n zeropad(minutes)}:${\n zeropad(secondsReturn)\n }${msTxt}`\n },\n\n // get a function that converts the units\n // + every time units are switched call the callback\n get(\n uuid: string, min: number, max: number, units: string | undefined,\n desiredUnits: undefined | null | string, commonUnitsName: string | null | undefined,\n switchUnitsCallback: (units: string) => void, temperatureSetting: \"celsius\" | \"fahrenheit\",\n secondsAsTimeSetting: boolean,\n ) {\n // validate the parameters\n if (typeof units === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n units = \"undefined\"\n }\n\n // it will be removed when we'll lift the state to redux\n currentTemperatureSetting = temperatureSetting\n currentSecondsAsTimeSetting = secondsAsTimeSetting\n\n // check if we support units conversion\n if (typeof scalableUnits[units] === \"undefined\"\n && typeof convertibleUnits[units] === \"undefined\"\n ) {\n // we can't convert these units\n // console.log('DEBUG: ' + uuid.toString() + ' can\\'t convert units: ' + units.toString());\n return (value: number) => value\n }\n\n // check if the caller wants the original units\n if (desiredUnits === undefined || desiredUnits === null || desiredUnits === \"original\"\n || desiredUnits === units\n ) {\n // console.log('DEBUG: ' + uuid.toString() + ' original units wanted');\n switchUnitsCallback(units)\n return identity\n }\n\n // now we know we can convert the units\n // and the caller wants some kind of conversion\n\n let tunits = null\n let tdivider = 0\n\n if (typeof scalableUnits[units] !== \"undefined\") {\n // units that can be scaled\n // we decide a divider\n\n if (desiredUnits === \"auto\") {\n // the caller wants to auto-scale the units\n\n // find the absolute maximum value that is rendered on the chart\n // based on this we decide the scale\n /* eslint-disable no-param-reassign */\n min = Math.abs(min)\n max = Math.abs(max)\n if (min > max) {\n max = min\n }\n /* eslint-enable no-param-reassign */\n\n const scalableUnitsGroup = scalableUnits[units]\n Object.keys(scalableUnitsGroup).forEach((unit) => {\n const unitDivider = scalableUnitsGroup[unit]\n if (unitDivider <= max && unitDivider > tdivider) {\n tunits = unit\n tdivider = unitDivider\n }\n })\n\n if (tunits === null || tdivider <= 0) {\n // we couldn't find auto-scaling candidate for unit\n switchUnitsCallback(units)\n return identity\n }\n\n if (typeof commonUnitsName === \"string\") {\n // the caller wants several charts to have the same units\n // data-common-units\n\n const commonUnitsKey = `${commonUnitsName}-${units}`\n\n // add our divider into the list of keys\n let t = this.keys[commonUnitsKey]\n if (typeof t === \"undefined\") {\n this.keys[commonUnitsKey] = {}\n t = this.keys[commonUnitsKey]\n }\n t[uuid] = {\n units: tunits,\n divider: tdivider,\n }\n\n // find the max divider of all charts\n let commonUnits = t[uuid]\n // todo remove imperative forEach\n Object.keys(t).forEach((x) => {\n if (t[x].divider > commonUnits.divider) {\n commonUnits = t[x]\n }\n })\n\n // save our common_max to the latest keys\n const latest = {\n units: commonUnits.units,\n divider: commonUnits.divider,\n }\n this.latest[commonUnitsKey] = latest\n\n tunits = latest.units\n tdivider = latest.divider\n\n // apply it to this chart\n switchUnitsCallback(tunits)\n return (value: number) => {\n if (tdivider !== latest.divider) {\n // another chart switched our common units\n // we should switch them too\n tunits = latest.units\n tdivider = latest.divider\n switchUnitsCallback(tunits)\n }\n\n return value / tdivider\n }\n }\n // the caller did not give data-common-units\n // this chart auto-scales independently of all others\n\n switchUnitsCallback(tunits)\n return (value: number) => value / tdivider\n }\n // the caller wants specific units\n\n if (typeof scalableUnits[units][desiredUnits] !== \"undefined\") {\n // all good, set the new units\n tdivider = scalableUnits[units][desiredUnits]\n switchUnitsCallback(desiredUnits)\n return (value: number) => value / tdivider\n }\n // oops! switch back to original units\n // eslint-disable-next-line no-console\n console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n is not supported.`)\n\n switchUnitsCallback(units)\n return identity\n } if (typeof convertibleUnits[units] !== \"undefined\") {\n // units that can be converted\n if (desiredUnits === \"auto\") {\n let newConvertFunction: ((number: number) => number | string) | undefined\n Object.keys(convertibleUnits[units]).forEach((x) => {\n if (newConvertFunction) { return }\n if (convertibleUnits[(units as string)][x].check(max)) {\n // converting\n switchUnitsCallback(x)\n newConvertFunction = convertibleUnits[(units as string)][x].convert\n }\n })\n if (newConvertFunction) {\n return newConvertFunction\n }\n\n // none checked ok (no conversion available)\n switchUnitsCallback(units)\n return identity\n } if (typeof convertibleUnits[units][desiredUnits] !== \"undefined\") {\n switchUnitsCallback(desiredUnits)\n return convertibleUnits[units][desiredUnits].convert\n }\n // eslint-disable-next-line no-console\n console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n is not supported.`)\n switchUnitsCallback(units)\n return identity\n }\n // hm... did we forget to implement the new type?\n // eslint-disable-next-line no-console\n console.log(`Unmatched unit conversion method for units ${units.toString()}`)\n switchUnitsCallback(units)\n return identity\n },\n}\n","import React, { useState, useCallback, useEffect } from \"react\"\nimport { ToolboxButton } from \"domains/chart/components/toolbox-button\"\nimport { setResizeHeightAction } from \"domains/chart/actions\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { useDispatch } from \"store/redux-separate-context\"\n\nexport const LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD = \"chart_heights.\"\nexport const LOCALSTORAGE_HEIGHT_KEY_PREFIX = \"chart_height.\"\n\ninterface Props {\n chartContainerElement: HTMLElement\n chartUuid: string\n heightId: string | undefined\n isLegendOnBottom: boolean\n}\n\nexport const ResizeHandler = ({\n chartContainerElement, chartUuid, heightId, isLegendOnBottom,\n}: Props) => {\n const [resizeHeight, setResizeHeight] = useState(() => chartContainerElement.clientHeight)\n const dispatch = useDispatch()\n\n useEffect(() => {\n // todo when attributes.id are present, hook height to localStorage\n if (resizeHeight >= 70) {\n dispatch(\n setResizeHeightAction({\n id: chartUuid,\n resizeHeight,\n }),\n )\n }\n }, [resizeHeight, chartUuid, heightId, dispatch])\n\n const handleResize = useCallback(\n (event) => {\n event.preventDefault()\n const intialHeight = chartContainerElement.clientHeight\n const eventStartHeight = event.type === \"touchstart\"\n ? event.touches[0].clientY\n : event.clientY\n\n const setHeight = (currentHeight: number) => {\n const nextHeight = intialHeight + currentHeight - eventStartHeight\n // eslint-disable-next-line no-param-reassign\n chartContainerElement.style.height = `${nextHeight.toString()}px`\n setResizeHeight(nextHeight)\n if (heightId) {\n const heightForPersistance = isLegendOnBottom\n ? (nextHeight - LEGEND_BOTTOM_SINGLE_LINE_HEIGHT)\n : nextHeight\n localStorage.setItem(\n `${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightId}`,\n `${heightForPersistance}`,\n )\n }\n }\n\n const onMouseMove = (e: MouseEvent) => setHeight(e.clientY)\n const onTouchMove = (e: TouchEvent) => setHeight(e.touches[0].clientY)\n\n const onMouseEnd = () => {\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseEnd)\n }\n\n const onTouchEnd = () => {\n document.removeEventListener(\"touchmove\", onTouchMove)\n document.removeEventListener(\"touchend\", onTouchEnd)\n }\n\n if (event.type === \"touchstart\") {\n document.addEventListener(\"touchmove\", onTouchMove)\n document.addEventListener(\"touchend\", onTouchEnd)\n } else {\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseEnd)\n }\n },\n [chartContainerElement.clientHeight, chartContainerElement.style.height, heightId,\n isLegendOnBottom],\n )\n\n return (\n <ToolboxButton\n className=\"netdata-legend-resize-handler\"\n onDoubleClick={(event: React.MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onMouseDown={handleResize}\n onTouchStart={handleResize}\n iconType=\"resize\"\n popoverTitle=\"Chart Resize\"\n popoverContent=\"Drag this point with your mouse or your finger (on touch devices), to resize\n the chart vertically. You can also <b>double click it</b> or <b>double tap it</b> to reset\n between 2 states: the default and the one that fits all the values.<br/><small>Help\n can be disabled from the settings.</small>\"\n />\n )\n}\n","import { createAction } from \"redux-act\"\n\nimport { createRequestAction } from \"utils/createRequestAction\"\nimport { RegistryMachine } from \"domains/global/sagas\"\nimport { storeKey } from \"./constants\"\nimport { ActiveAlarms, ChartsMetadata, Snapshot, Alarm } from \"./types\"\n\ninterface RequestCommonColors {\n chartContext: string\n chartUuid: string\n colorsAttribute: string | undefined\n commonColorsAttribute: string | undefined\n dimensionNames: string[]\n}\nexport const requestCommonColorsAction = createAction<RequestCommonColors>(\n `${storeKey}/globalRequestCommonColors`\n)\n\ninterface SetCommonMinAction {\n chartUuid: string\n commonMinKey: string\n value: number\n}\nexport const setCommonMinAction = createAction<SetCommonMinAction>(`${storeKey}/setCommonMin`)\n\ninterface SetCommonMaxAction {\n chartUuid: string\n commonMaxKey: string\n value: number\n}\nexport const setCommonMaxAction = createAction<SetCommonMaxAction>(`${storeKey}/setCommonMax`)\n\ninterface SetGlobalSelectionAction {\n chartUuid: string | null\n hoveredX: number\n}\nexport const setGlobalSelectionAction = createAction<SetGlobalSelectionAction>(\n `${storeKey}/setGlobalSelection`\n)\n\nexport interface SetGlobalPanAndZoomAction {\n after: number\n before: number\n masterID?: string\n shouldForceTimeRange?: boolean\n}\nexport const setGlobalPanAndZoomAction = createAction<SetGlobalPanAndZoomAction>(\n `${storeKey}/setGlobalPanAndZoom`\n)\n\nexport const resetGlobalPanAndZoomAction = createAction(`${storeKey}/resetGlobalPanAndZoomAction`)\n\nexport interface SetDefaultAfterAction {\n after: number\n}\nexport const setDefaultAfterAction = createAction<SetDefaultAfterAction>(\n `${storeKey}/setDefaultAfterAction`\n)\n\nexport const resetDefaultAfterAction = createAction(`${storeKey}/resetDefaultAfterAction`)\n\nexport interface SetGlobalChartUnderlayAction {\n after: number\n before: number\n masterID: string\n}\nexport const setGlobalChartUnderlayAction = createAction<SetGlobalChartUnderlayAction>(\n `${storeKey}/setGlobalChartUnderlay`\n)\n\nexport const centerAroundHighlightAction = createAction(`${storeKey}/centerAroundHighlightAction`)\nexport const clearHighlightAction = createAction(`${storeKey}/clearHighlightAction`)\n\ninterface WindowFocusChangeAction {\n hasWindowFocus: boolean\n}\nexport const windowFocusChangeAction = createAction<WindowFocusChangeAction>(\n `${storeKey}/windowFocusChangeAction`\n)\n\nexport interface FetchHelloPayload {\n serverDefault: string\n}\n/* eslint-disable camelcase */\nexport interface HelloResponse {\n action: \"hello\"\n anonymous_statistics: boolean\n cloud_base_url: string\n hostname: string\n machine_guid: string\n registry: string\n status: string\n}\n/* eslint-enable camelcase */\n\nexport const fetchHelloAction = createRequestAction<\n FetchHelloPayload,\n { cloudBaseURL: string; hostname: string; isCloudEnabled: boolean; machineGuid: string }\n>(`${storeKey}/fetchHelloAction`)\n\ninterface UpdatePersonUrlsAction {\n personGuid: string\n registryMachines: { [key: string]: RegistryMachine }\n registryMachinesArray: RegistryMachine[]\n}\nexport const updatePersonUrlsAction = createAction<UpdatePersonUrlsAction>(\n `${storeKey}/updatePersonUrlsAction`\n)\n\nexport interface AccessRegistrySuccessAction {\n registryServer: string\n}\nexport const accessRegistrySuccessAction = createAction<AccessRegistrySuccessAction>(\n `${storeKey}/accessRegistrySuccessAction`\n)\n\nexport interface StartAlarmsPayload {\n serverDefault: string\n}\nexport const startAlarmsAction = createAction<StartAlarmsPayload>(`${storeKey}/startAlarmsAction`)\n\nexport const fetchAllAlarmsAction = createRequestAction(`${storeKey}/fetchAllAlarmsAction`)\n\nexport interface UpdateActiveAlarmAction {\n activeAlarms: ActiveAlarms\n}\nexport const updateActiveAlarmsAction = createAction<UpdateActiveAlarmAction>(\n `${storeKey}/updateActiveAlarmsAction`\n)\n\nexport interface SetOptionAction {\n key: string\n value: unknown\n}\nexport const setOptionAction = createAction<SetOptionAction>(`${storeKey}/setOptionAction`)\n\nexport const resetOptionsAction = createAction(`${storeKey}/resetOptions`)\n\nexport const loadSnapshotAction = createAction<{ snapshot: Snapshot }>(\n `${storeKey}/loadSnapshotAction`\n)\n\nexport const chartsMetadataRequestSuccess = createAction<{ data: ChartsMetadata }>(\n `${storeKey}/chartsMetadataRequestSuccess`\n)\n\nexport interface SetSpacePanelStatusActionPayload {\n isActive: boolean\n}\nexport const setSpacePanelStatusAction = createAction<SetSpacePanelStatusActionPayload>(\n `${storeKey}/setSpacePanelStatusAction`\n)\n\nexport interface SetSpacePanelTransitionEndPayload {\n isActive: boolean\n}\nexport const setSpacePanelTransitionEndAction = createAction<SetSpacePanelTransitionEndPayload>(\n `${storeKey}/setSpacePanelStatusAction`\n)\n\nexport const setAlarmAction = createAction<{ alarm: Alarm }>(`${storeKey}/setAlarmAction`)\n\nexport const resetRegistry = createAction(`${storeKey}/resetRegistry`)\n\nexport const setGlobalPauseAction = createAction(`${storeKey}/setGlobalPauseAction`)\nexport const resetGlobalPauseAction = createAction<{ forcePlay?: boolean }>(\n `${storeKey}/resetGlobalPauseAction`\n)\nexport const setUTCOffset = createAction<{ utcOffset?: number | string }>(`${storeKey}/setUTCOffset`)\n","import * as React from \"react\"\nimport classNames from \"classnames\"\n\nimport \"./button.css\"\n\ntype Props = React.ButtonHTMLAttributes<HTMLButtonElement>\nexport const Button = React.forwardRef(({\n children,\n className,\n ...rest\n}: Props, ref: React.Ref<HTMLButtonElement>) => (\n <button\n {...rest} // eslint-disable-line react/jsx-props-no-spreading\n type=\"button\"\n className={classNames(\"netdata-reset-button\", className)}\n ref={ref}\n >\n {children}\n </button>\n))\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectShowHelp } from \"domains/global/selectors\"\nimport { Icon, IconType } from \"components/icon\"\nimport { Button } from \"components/button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface ToolboxButtonProps {\n className?: string\n iconType: IconType\n onClick?: ClickCallback\n onDoubleClick?: (event: React.MouseEvent) => void\n onMouseDown?: (event: React.MouseEvent) => void\n onTouchStart?: (event: React.TouchEvent) => void\n popoverContent: string\n popoverTitle: string\n}\nexport const ToolboxButton = ({\n className,\n iconType,\n onClick,\n onDoubleClick,\n onMouseDown,\n onTouchStart,\n popoverContent,\n popoverTitle,\n}: ToolboxButtonProps) => {\n const buttonRef = useRef(null)\n const showHelp = useSelector(selectShowHelp)\n useEffect(() => {\n if (buttonRef.current && showHelp) {\n window.$(buttonRef.current).popover({\n container: \"body\",\n animation: false,\n html: true,\n trigger: \"hover\",\n placement: \"bottom\",\n delay: {\n show: window.NETDATA.options.current.show_help_delay_show_ms,\n hide: window.NETDATA.options.current.show_help_delay_hide_ms,\n },\n title: popoverTitle,\n content: popoverContent,\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n return (\n <Button\n className={classNames(className)}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n ref={buttonRef}\n >\n <Icon iconType={iconType} />\n </Button>\n )\n}\n","import { prop, path } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { utmUrlSuffix } from \"utils/utils\"\nimport { alwaysEndWithSlash } from \"utils/server-detection\"\n\nimport { GetKeyArguments, getKeyForCommonColorsState } from \"./reducer\"\nimport { storeKey } from \"./constants\"\nimport { OptionsKey } from \"./options\"\n\nconst NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const createSelectAssignedColors = (args: GetKeyArguments) => (state: AppStateT) => {\n const keyName = getKeyForCommonColorsState(args)\n const substate = state[storeKey].commonColorsKeys[keyName]\n return substate && substate.assigned\n}\n\nexport const selectGlobal = (state: AppStateT) => state.global\n\nexport const selectCommonMin = createSelector(\n selectGlobal,\n (_: unknown, commonMinKey: string) => commonMinKey,\n (globalState, commonMinKey) => (\n globalState.commonMin[commonMinKey]\n ),\n)\n\nexport const selectCommonMax = createSelector(\n selectGlobal,\n (_: unknown, commonMaxKey: string) => commonMaxKey,\n (globalState, commonMaxKey) => (\n globalState.commonMax[commonMaxKey]\n ),\n)\n\nexport const selectGlobalSelection = createSelector(selectGlobal, prop(\"hoveredX\"))\n\nexport const selectGlobalSelectionMaster = createSelector(\n selectGlobal,\n prop(\"currentSelectionMasterId\"),\n)\n\nexport const selectGlobalPanAndZoom = createSelector(selectGlobal, prop(\"globalPanAndZoom\"))\n\nexport const selectDefaultAfter = createSelector(selectGlobal, prop(\"defaultAfter\"))\n\nexport const selectGlobalChartUnderlay = createSelector(selectGlobal, prop(\"globalChartUnderlay\"))\n\nexport const selectHasWindowFocus = createSelector(selectGlobal, prop(\"hasWindowFocus\"))\nexport const selectGlobalPause = createSelector(selectGlobal, prop(\"globalPause\"))\n\nexport const selectSnapshot = createSelector(\n selectGlobal,\n prop(\"snapshot\"),\n)\n\nexport const selectRegistry = createSelector(selectGlobal, prop(\"registry\"))\n\nexport const selectCloudBaseUrl = createSelector(selectRegistry, prop(\"cloudBaseURL\"))\n\nconst utmParametersToString = (utmParameters = {}) =>\n Object.keys(utmParameters).reduce((acc, key) => (acc += `&utm_${key}=${utmParameters[key]}`), \"\")\n\nexport const selectSignInUrl = utmParameters =>\n createSelector(selectRegistry, selectCloudBaseUrl, (registry, cloudBaseURL) => {\n const name = encodeURIComponent(registry.hostname)\n const origin = encodeURIComponent(\n alwaysEndWithSlash(window.location.origin + window.location.pathname)\n )\n // not adding redirect_url - it needs to always be based on newest href\n // eslint-disable-next-line max-len\n return `${cloudBaseURL}/sign-in?id=${\n registry.machineGuid\n }&name=${name}&origin=${origin}${utmUrlSuffix}${utmParametersToString(utmParameters)}`\n })\n\nexport const selectIsFetchingHello = createSelector(selectRegistry, prop(\"isFetchingHello\"))\nexport const selectIsUsingGlobalRegistry = createSelector(\n selectRegistry,\n ({ registryServer }) => registryServer && (registryServer !== NETDATA_REGISTRY_SERVER),\n)\n\n// currently cloud-base-url is taken from registry?action=hello call, which returns error\n// if Agent+browser are configured to respect do-not-track\nexport const selectIsCloudEnabled = createSelector(\n selectRegistry,\n (registry) => registry.isCloudEnabled && !registry.isHelloCallError,\n)\nexport const selectHasFetchedInfo = createSelector(selectRegistry, prop(\"hasFetchedInfo\"))\nexport const selectFullInfoPayload = createSelector(selectRegistry, prop(\"fullInfoPayload\"))\nexport const selectLacksProtoBufSupport = createSelector(\n selectFullInfoPayload,\n info => info[\"agent-claimed\"] && !info[\"aclk-ng-new-cloud-protocol\"]\n)\n\nexport const selectHasStartedAlarms = createSelector(\n selectGlobal,\n path([\"alarms\", \"hasStartedAlarms\"]),\n)\nexport const selectActiveAlarms = createSelector(\n selectGlobal,\n (global) => global.alarms.activeAlarms,\n)\n\nexport const selectAlarm = createSelector(\n selectGlobal,\n (global) => global.alarm\n)\n\nexport const selectSpacePanelIsActive = createSelector(selectGlobal, prop(\"spacePanelIsActive\"))\nexport const selectSpacePanelTransitionEndIsActive = createSelector(\n selectGlobal, prop(\"spacePanelTransitionEndIsActive\"),\n)\n\nexport const selectOptions = createSelector(selectGlobal, global => global.options)\n\nexport const createSelectOption = <T extends OptionsKey>(optionName: T) => (\n createSelector(selectOptions, (options) => options[optionName])\n)\n\nexport const selectDestroyOnHide = createSelectOption(\"destroy_on_hide\")\nexport const selectStopUpdatesWhenFocusIsLost = createSelectOption(\n \"stop_updates_when_focus_is_lost\",\n)\nexport const selectShouldEliminateZeroDimensions = createSelectOption(\"eliminate_zero_dimensions\")\nexport const selectIsAsyncOnScroll = createSelectOption(\"async_on_scroll\")\n\nexport const selectParallelRefresher = createSelectOption(\"parallel_refresher\")\nexport const selectConcurrentRefreshes = createSelectOption(\"concurrent_refreshes\")\nexport const selectSyncSelection = createSelectOption(\"sync_selection\")\nexport const selectSyncPanAndZoom = createSelectOption(\"sync_pan_and_zoom\")\n\nexport const selectTheme = createSelectOption(\"theme\")\nexport const selectShowHelp = createSelectOption(\"show_help\")\nexport const selectPanAndZoomDataPadding = createSelectOption(\"pan_and_zoom_data_padding\")\nexport const selectSmoothPlot = createSelectOption(\"smooth_plot\")\n\nexport const selectUnitsScalingMethod = createSelectOption(\"units\")\nexport const selectTemperatureSetting = createSelectOption(\"temperature\")\nexport const selectSecondsAsTimeSetting = createSelectOption(\"seconds_as_time\")\nexport const selectTimezoneSetting = createSelectOption(\"timezone\")\nexport const selectUTCOffsetSetting = createSelectOption(\"utcOffset\")\nexport const selectUserSetServerTimezone = createSelectOption(\"user_set_server_timezone\")\n\nexport const selectChartsMetadata = createSelector(\n selectGlobal,\n (global) => global.chartsMetadata.data,\n)\n\nexport const selectChartMetadataFromChartsCall = createSelector(\n selectChartsMetadata,\n (_: unknown, { chartId }: { chartId: string, id: string }) => chartId,\n (allMetadata, chartId) => allMetadata?.charts[chartId],\n)\n","export * from \"./utils\"\n","export const name2id = (s: string) => s\n .replace(/ /g, \"_\")\n .replace(/:/g, \"_\")\n .replace(/\\(/g, \"_\")\n .replace(/\\)/g, \"_\")\n .replace(/\\./g, \"_\")\n .replace(/\\//g, \"_\")\n","import { init, last, mergeAll } from \"ramda\"\nimport { createReducer } from \"redux-act\"\n\nimport { getInitialAfterFromWindow } from \"utils/utils\"\nimport { isMainJs } from \"utils/env\"\nimport { RegistryMachine } from \"domains/global/sagas\"\nimport { Alarm, ActiveAlarms, Snapshot, ChartsMetadata } from \"domains/global/types\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\nimport { InfoPayload } from \"./__mocks__/info-mock\"\nimport {\n requestCommonColorsAction,\n setGlobalChartUnderlayAction,\n setGlobalSelectionAction,\n setGlobalPanAndZoomAction,\n centerAroundHighlightAction,\n clearHighlightAction,\n resetGlobalPanAndZoomAction,\n setDefaultAfterAction,\n windowFocusChangeAction,\n fetchHelloAction,\n updatePersonUrlsAction,\n startAlarmsAction,\n updateActiveAlarmsAction,\n setOptionAction,\n loadSnapshotAction,\n chartsMetadataRequestSuccess,\n setCommonMaxAction,\n setCommonMinAction,\n resetOptionsAction,\n setSpacePanelStatusAction,\n setSpacePanelTransitionEndAction,\n resetRegistry,\n accessRegistrySuccessAction,\n resetDefaultAfterAction,\n setAlarmAction,\n setGlobalPauseAction,\n resetGlobalPauseAction,\n setUTCOffset,\n} from \"./actions\"\nimport {\n Options,\n optionsMergedWithLocalStorage,\n getOptionsMergedWithLocalStorage,\n clearLocalStorage,\n} from \"./options\"\nimport { CLOUD_BASE_URL_DISABLED } from \"./constants\"\n\ninterface CommonMinMax {\n [commonKey: string]: {\n charts: {\n [chartUuid: string]: number\n }\n currentExtreme: number\n }\n}\n\nexport type StateT = {\n commonColorsKeys: {\n [key: string]: {\n // key can be uuid, chart's context or commonColors attribute\n assigned: {\n // name-value of dimensions and their colors\n [dimensionName: string]: string\n }\n available: string[] // an array of colors available to be used\n custom: string[] // the array of colors defined by the user\n charts: {} // the charts linked to this todo remove\n copyTheme: boolean\n }\n }\n commonMin: CommonMinMax\n commonMax: CommonMinMax\n currentSelectionMasterId: string | null\n globalPanAndZoom: null | {\n after: number // timestamp in ms\n before: number // timestamp in ms\n masterID?: string\n shouldForceTimeRange?: boolean\n }\n defaultAfter: number\n globalChartUnderlay: null | {\n after: number\n before: number\n masterID: string\n }\n hoveredX: number | null\n hasWindowFocus: boolean\n globalPause: boolean\n\n spacePanelIsActive: boolean\n spacePanelTransitionEndIsActive: boolean\n\n registry: {\n cloudBaseURL: string | null\n hasFetchedHello: boolean\n isHelloCallError: boolean | null\n hasFetchedInfo: boolean\n hostname: string\n isCloudEnabled: boolean | null\n isCloudAvailable: boolean | null\n isAgentClaimed: boolean | null\n isACLKAvailable: boolean | null\n hasStartedInfo: boolean\n fullInfoPayload: InfoPayload | null\n isFetchingHello: boolean\n machineGuid: string | null\n personGuid: string | null\n registryMachines: { [key: string]: RegistryMachine } | null\n registryMachinesArray: RegistryMachine[] | null\n registryServer: string | null\n }\n\n chartsMetadata: {\n isFetching: boolean\n isFetchingError: boolean\n data: null | ChartsMetadata\n }\n\n alarms: {\n activeAlarms: null | ActiveAlarms\n hasStartedAlarms: boolean\n }\n alarm: null | Alarm\n\n snapshot: Snapshot | null\n options: Options\n}\n\nexport const initialDefaultAfter = isMainJs ? getInitialAfterFromWindow() : -900\n\nexport const initialState: StateT = {\n commonColorsKeys: {},\n commonMin: {},\n commonMax: {},\n currentSelectionMasterId: null,\n globalPanAndZoom: null,\n // todo for dashboard calculate it based on width and window.NETDATA.chartDefaults.after\n defaultAfter: initialDefaultAfter,\n globalChartUnderlay: null,\n hoveredX: null,\n hasWindowFocus: document.hasFocus(),\n globalPause: false,\n spacePanelIsActive: false, // set to true only for testing layout\n // the same as property above, just updated after transition ends\n spacePanelTransitionEndIsActive: false,\n\n registry: {\n cloudBaseURL: null,\n hasFetchedInfo: false,\n hasFetchedHello: false,\n isHelloCallError: null,\n hostname: \"unknown\",\n isCloudEnabled: null,\n isCloudAvailable: null,\n isAgentClaimed: null,\n isACLKAvailable: null,\n hasStartedInfo: false,\n isFetchingHello: false,\n fullInfoPayload: null,\n machineGuid: null,\n personGuid: null,\n registryMachines: null,\n registryMachinesArray: null,\n registryServer: null,\n },\n\n snapshot: null,\n alarms: {\n activeAlarms: null,\n hasStartedAlarms: false,\n },\n alarm: null,\n\n chartsMetadata: {\n isFetching: false,\n isFetchingError: false,\n data: null,\n },\n\n options: optionsMergedWithLocalStorage,\n}\n\nexport const globalReducer = createReducer<StateT>({}, initialState)\n\nexport interface GetKeyArguments {\n colorsAttribute: string | undefined\n commonColorsAttribute: string | undefined\n chartUuid: string\n chartContext: string\n}\nexport const getKeyForCommonColorsState = ({\n colorsAttribute,\n commonColorsAttribute,\n chartUuid,\n chartContext,\n}: GetKeyArguments) => {\n const hasCustomColors = typeof colorsAttribute === \"string\" && colorsAttribute.length > 0\n\n // when there's commonColors attribute, share the state between all charts with that attribute\n // if not, when there are custom colors, make each chart independent\n // if not, share the same state between charts with the same context\n return commonColorsAttribute || (hasCustomColors ? chartUuid : chartContext)\n}\n\nconst hasLastOnly = (array: string[]) => last(array) === \"ONLY\"\nconst removeLastOnly = (array: string[]) => (hasLastOnly(array) ? init(array) : array)\nconst createCommonColorsKeysSubstate = (\n colorsAttribute: string | undefined,\n hasCustomColors: boolean\n) => {\n const custom = hasCustomColors ? removeLastOnly((colorsAttribute as string).split(\" \")) : []\n const shouldCopyTheme = hasCustomColors\n ? // disable copyTheme when there's \"ONLY\" keyword in \"data-colors\" attribute\n !hasLastOnly((colorsAttribute as string).split(\" \"))\n : true\n const available = [\n ...custom,\n ...(shouldCopyTheme || custom.length === 0 ? window.NETDATA.themes.current.colors : []),\n ]\n return {\n assigned: {},\n available,\n custom,\n }\n}\n\nglobalReducer.on(\n requestCommonColorsAction,\n //@ts-ignore\n (state, { chartContext, chartUuid, colorsAttribute, commonColorsAttribute, dimensionNames }) => {\n const keyName = getKeyForCommonColorsState({\n colorsAttribute,\n commonColorsAttribute,\n chartUuid,\n chartContext,\n })\n\n const hasCustomColors = typeof colorsAttribute === \"string\" && colorsAttribute.length > 0\n const subState =\n state.commonColorsKeys[keyName] ||\n createCommonColorsKeysSubstate(colorsAttribute, hasCustomColors)\n\n const currentlyAssignedNr = Object.keys(subState.assigned).length\n const requestedDimensionsAssigned = mergeAll(\n dimensionNames\n // dont assign already assigned dimensions\n .filter(dimensionName => !subState.assigned[dimensionName])\n .map((dimensionName, i) => ({\n [dimensionName]:\n subState.available[(i + currentlyAssignedNr) % subState.available.length],\n }))\n )\n const assigned = {\n ...subState.assigned,\n ...requestedDimensionsAssigned,\n }\n\n return {\n ...state,\n commonColorsKeys: {\n ...state.commonColorsKeys,\n [keyName]: {\n ...subState,\n assigned,\n },\n },\n }\n }\n)\n\nglobalReducer.on(setCommonMinAction, (state, { chartUuid, commonMinKey, value }) => {\n const charts = {\n ...state.commonMin[commonMinKey]?.charts,\n [chartUuid]: value,\n }\n const currentExtreme = Math.min(...Object.values(charts))\n\n return {\n ...state,\n commonMin: {\n ...state.commonMin,\n [commonMinKey]: {\n charts,\n currentExtreme,\n },\n },\n }\n})\n\nglobalReducer.on(setCommonMaxAction, (state, { chartUuid, commonMaxKey, value }) => {\n const charts = {\n ...state.commonMax[commonMaxKey]?.charts,\n [chartUuid]: value,\n }\n const currentExtreme = Math.max(...Object.values(charts))\n\n return {\n ...state,\n commonMax: {\n ...state.commonMax,\n [commonMaxKey]: {\n charts,\n currentExtreme,\n },\n },\n }\n})\n\nglobalReducer.on(setSpacePanelStatusAction, (state, { isActive }) => ({\n ...state,\n spacePanelIsActive: isActive,\n}))\n\nglobalReducer.on(setSpacePanelTransitionEndAction, (state, { isActive }) => ({\n ...state,\n spacePanelTransitionEndIsActive: isActive,\n}))\n\nglobalReducer.on(setGlobalSelectionAction, (state, { chartUuid, hoveredX }) => ({\n ...state,\n hoveredX,\n currentSelectionMasterId: chartUuid,\n}))\n\nglobalReducer.on(setGlobalPanAndZoomAction, (state, payload) => ({\n ...state,\n globalPanAndZoom: payload,\n}))\n\nglobalReducer.on(resetGlobalPanAndZoomAction, state => ({\n ...state,\n globalPanAndZoom: initialState.globalPanAndZoom,\n hoveredX: initialState.hoveredX, // need to reset this also on mobile\n}))\n\nglobalReducer.on(setDefaultAfterAction, (state, { after }) => ({\n ...state,\n defaultAfter: after,\n}))\n\nglobalReducer.on(resetDefaultAfterAction, state => ({\n ...state,\n defaultAfter: initialState.defaultAfter,\n}))\n\nglobalReducer.on(setGlobalChartUnderlayAction, (state, { after, before, masterID }) => ({\n ...state,\n globalChartUnderlay: {\n after,\n before,\n masterID,\n },\n}))\n\nglobalReducer.on(centerAroundHighlightAction, state => {\n if (!state.globalChartUnderlay) {\n // eslint-disable-next-line no-console\n console.warn(\"Cannot center around empty selection\")\n return state\n }\n const { after, before } = state.globalChartUnderlay\n const highlightMargin = (before - after) / 2\n return {\n ...state,\n globalPanAndZoom: {\n after: after - highlightMargin,\n before: before + highlightMargin,\n },\n }\n})\n\nglobalReducer.on(\n clearHighlightAction,\n (state, { resetPanAndZoom = true }: { resetPanAndZoom?: boolean } = {}) => ({\n ...state,\n globalChartUnderlay: initialState.globalChartUnderlay,\n ...(resetPanAndZoom ? { globalPanAndZoom: initialState.globalPanAndZoom } : {}),\n })\n)\n\nglobalReducer.on(windowFocusChangeAction, (state, { hasWindowFocus }) => {\n // make additional check, because it's possible to get hasWindowFocus === false\n // message from iframe, after main window makes the state change (race condition)\n const hasFocusNow = document.hasFocus()\n return {\n ...state,\n hasWindowFocus: hasFocusNow || hasWindowFocus,\n }\n})\n\nglobalReducer.on(setGlobalPauseAction, state => ({ ...state, globalPause: true }))\nglobalReducer.on(resetGlobalPauseAction, (state, { forcePlay }) => ({\n ...state,\n globalPause: initialState.globalPause,\n globalPanAndZoom: initialState.globalPanAndZoom,\n hoveredX: initialState.hoveredX,\n options: { ...state.options, stop_updates_when_focus_is_lost: !forcePlay },\n}))\n\nglobalReducer.on(setUTCOffset, (state, { utcOffset }) => ({\n ...state,\n options: { ...state.options, utcOffset },\n}))\n\nglobalReducer.on(fetchHelloAction.request, state => ({\n ...state,\n registry: {\n ...state.registry,\n isFetchingHello: true,\n },\n}))\n\nglobalReducer.on(fetchHelloAction.success, (state, { cloudBaseURL, hostname, machineGuid }) => ({\n ...state,\n registry: {\n ...state.registry,\n cloudBaseURL,\n isFetchingHello: false,\n hasFetchedHello: true,\n hostname,\n machineGuid,\n },\n}))\nglobalReducer.on(fetchHelloAction.failure, state => ({\n ...state,\n registry: {\n ...state.registry,\n cloudBaseURL: CLOUD_BASE_URL_DISABLED,\n isFetchingHello: false,\n isHelloCallError: true,\n },\n}))\nglobalReducer.on(accessRegistrySuccessAction, (state, { registryServer }) => ({\n ...state,\n registry: {\n ...state.registry,\n registryServer,\n },\n}))\n\nglobalReducer.on(resetRegistry, state => ({\n ...state,\n registry: {\n ...state.registry,\n hasFetchedHello: initialState.registry.hasFetchedHello,\n },\n}))\n\nglobalReducer.on(fetchInfoAction, state => ({\n ...state,\n registry: {\n ...state.registry,\n hasStartedInfo: true,\n },\n}))\nglobalReducer.on(\n fetchInfoAction.success,\n (\n state,\n { isCloudAvailable, isCloudEnabled, isAgentClaimed, isACLKAvailable, fullInfoPayload }\n ) => ({\n ...state,\n registry: {\n ...state.registry,\n hasFetchedInfo: true,\n isCloudAvailable,\n isCloudEnabled,\n isAgentClaimed,\n isACLKAvailable,\n fullInfoPayload,\n },\n })\n)\n\nglobalReducer.on(fetchInfoAction.failure, state => ({\n ...state,\n registry: {\n ...state.registry,\n isCloudAvailable: false,\n isCloudEnabled: false,\n isAgentClaimed: false,\n isACLKAvailable: false,\n },\n}))\n\nglobalReducer.on(\n updatePersonUrlsAction,\n (state, { personGuid, registryMachines, registryMachinesArray }) => ({\n ...state,\n registry: {\n ...state.registry,\n personGuid,\n registryMachines,\n registryMachinesArray,\n },\n })\n)\n\nglobalReducer.on(startAlarmsAction, state => ({\n ...state,\n alarms: {\n ...state.alarms,\n hasStartedAlarms: true,\n },\n}))\n\nglobalReducer.on(updateActiveAlarmsAction, (state, { activeAlarms }) => ({\n ...state,\n alarms: {\n ...state.alarms,\n activeAlarms,\n },\n}))\n\nglobalReducer.on(setOptionAction, (state, { key, value }) => ({\n ...state,\n options: {\n ...state.options,\n [key]: value,\n },\n}))\n\nglobalReducer.on(resetOptionsAction, state => {\n clearLocalStorage()\n return {\n ...state,\n options: getOptionsMergedWithLocalStorage(),\n }\n})\n\nglobalReducer.on(loadSnapshotAction, (state, { snapshot }) => {\n const parsedData = Object.keys(snapshot.data)\n .map(dataKey => {\n let uncompressed\n try {\n // @ts-ignore\n uncompressed = snapshot.uncompress(snapshot.data[dataKey])\n\n // repeat old logging\n if (uncompressed === null) {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is null`)\n return null\n }\n\n if (typeof uncompressed === \"undefined\") {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is undefined`)\n return null\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`decompression of snapshot data for key ${dataKey} failed`, e)\n uncompressed = null\n }\n\n if (typeof uncompressed !== \"string\") {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is not string`)\n return {}\n }\n\n let data\n try {\n data = JSON.parse(uncompressed)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`parsing snapshot data for key ${dataKey} failed`)\n return {}\n }\n\n return { [dataKey]: data }\n })\n .reduce((acc, obj) => ({ ...acc, ...obj }), {})\n\n return {\n ...state,\n snapshot: {\n ...snapshot,\n data: parsedData as { [key: string]: unknown },\n },\n }\n})\n\nglobalReducer.on(setAlarmAction, (state, { alarm }) => ({\n ...state,\n alarm,\n}))\n\nglobalReducer.on(chartsMetadataRequestSuccess, (state, { data }) => ({\n ...state,\n chartsMetadata: {\n ...state.chartsMetadata,\n data,\n },\n}))\n","import React from \"react\"\nimport classNames from \"classnames\"\n\n// todo add supoort for window.netdataIcons\nexport type IconType = \"left\" | \"reset\" | \"right\" | \"zoomIn\" | \"zoomOut\" | \"resize\" | \"lineChart\"\n | \"areaChart\" | \"noChart\" | \"loading\" | \"noData\"\nconst typeToClassName = (iconType: IconType) => ({\n left: \"fa-backward\",\n reset: \"fa-play\",\n right: \"fa-forward\",\n zoomIn: \"fa-plus\",\n zoomOut: \"fa-minus\",\n resize: \"fa-sort\",\n lineChart: \"fa-chart-line\",\n areaChart: \"fa-chart-area\",\n noChart: \"fa-chart-area\",\n loading: \"fa-sync-alt\",\n noData: \"fa-exclamation-triangle\",\n} as {[key in IconType]: string})[iconType]\n\ninterface Props {\n iconType: IconType\n}\nexport const Icon = ({ iconType }: Props) => (\n <i className={classNames(\"fas\", typeToClassName(iconType))} />\n)\n","import {\n map, omit, assoc, pick,\n} from \"ramda\"\nimport { createReducer } from \"redux-act\"\n\nimport { setOptionAction } from \"domains/global/actions\"\nimport { SYNC_PAN_AND_ZOOM } from \"domains/global/options\"\nimport { useNewKeysOnlyIfDifferent } from \"utils/utils\"\n\nimport {\n fetchDataAction,\n fetchChartAction,\n setResizeHeightAction,\n clearChartStateAction,\n fetchDataForSnapshotAction,\n snapshotExportResetAction,\n setChartPanAndZoomAction,\n resetChartPanAndZoomAction,\n fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartState } from \"./chart-types\"\n\nexport type StateT = {\n [chartID: string]: ChartState\n}\n\nexport const initialState = {\n}\nexport const initialSingleState = {\n chartData: null,\n chartId: null,\n chartMetadata: null,\n chartPanAndZoom: null,\n fetchDataParams: {\n isRemotelyControlled: false,\n viewRange: null,\n },\n isFetchingData: false,\n isFetchDataFailure: false,\n isFetchDetailsFailure: false,\n isFetchingDetails: false,\n resizeHeight: null,\n\n snapshotDataIsFetching: false,\n snapshotDataIsError: false,\n snapshotData: null,\n viewRange: null,\n}\n\nexport const chartReducer = createReducer<StateT>(\n {},\n initialState,\n)\n\nexport const getSubstate = (state: StateT, id: string) => state[id] || initialSingleState\n\nchartReducer.on(fetchDataAction.request, (state, { chart, fetchDataParams, id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartId: chart,\n isFetchingData: true,\n viewRange: fetchDataParams.viewRange,\n },\n}))\n\nchartReducer.on(fetchDataCancelAction, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingData: false,\n },\n}))\n\nchartReducer.on(fetchDataAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingData: false,\n isFetchDataFailure: true,\n },\n}))\n\nchartReducer.on(fetchDataAction.success, (state, { id, chartData, fetchDataParams }) => {\n const substate = getSubstate(state, id)\n return {\n ...state,\n [id]: {\n ...substate,\n chartData: useNewKeysOnlyIfDifferent([\"dimension_names\"], substate.chartData, chartData!),\n fetchDataParams,\n isFetchingData: false,\n isFetchDataFailure: false,\n viewRange: fetchDataParams.viewRange,\n },\n }\n})\n\n\nchartReducer.on(fetchDataForSnapshotAction.request, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: true,\n },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: false,\n snapshotDataIsError: true,\n },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.success, (state, { id, snapshotData }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: false,\n snapshotDataIsError: false,\n snapshotData,\n },\n}))\n\nchartReducer.on(snapshotExportResetAction, (state) => map((substate) => ({\n ...substate,\n ...pick([\"snapshotDataIsFetching\", \"snapshotDataIsError\", \"snapshotData\"], initialSingleState),\n}), state))\n\n\nchartReducer.on(fetchChartAction.request, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingDetails: true,\n },\n}))\n\nchartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchDetailsFailure: true,\n },\n}))\n\nchartReducer.on(fetchChartAction.success, (state, { id, chartMetadata }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartMetadata,\n isFetchingDetails: false,\n isFetchDetailsFailure: false,\n },\n}))\n\n// todo handle errors without creating a loop\n// chartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n// ...state,\n// [id]: {\n// ...getSubstate(state, id),\n// isFetchingDetails: false,\n// },\n// }))\n\nchartReducer.on(setResizeHeightAction, (state, { id, resizeHeight }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n resizeHeight,\n },\n}))\n\nchartReducer.on(setChartPanAndZoomAction, (state, {\n after, before, id, shouldForceTimeRange,\n}) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartPanAndZoom: { after, before, shouldForceTimeRange },\n },\n}))\n\nchartReducer.on(resetChartPanAndZoomAction, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartPanAndZoom: initialSingleState.chartPanAndZoom,\n },\n}))\n\nchartReducer.on(setOptionAction, (state, { key, value }) => {\n // clear chartPanAndZoom, when SYNC_PAN_AND_ZOOM flag is turned on\n if (key === SYNC_PAN_AND_ZOOM && value === true) {\n return map(\n assoc(\"chartPanAndZoom\", initialSingleState.chartPanAndZoom),\n state,\n )\n }\n return state\n})\n\nchartReducer.on(clearChartStateAction, (state, { id }) => omit([id], state))\n","import { mapObjIndexed, mergeAll, isEmpty } from \"ramda\"\nimport { Method } from \"axios\"\nimport { initialLegendRight } from \"domains/global/options\"\nimport { ChartLibraryName } from \"./chartLibrariesSettings\"\n\ntype OutputValue = string | boolean | number | null | undefined | any[]\n// almost the same as in old dashboard to ensure readers that it works the same way\nconst getDataAttribute = (element: Element, key: string, defaultValue?: OutputValue) => {\n const dataKey = `data-${key}`\n if (element.hasAttribute(dataKey)) {\n // we know it's not null because of hasAttribute()\n const data = element.getAttribute(dataKey) as string\n\n if (data === \"true\") {\n return true\n }\n if (data === \"false\") {\n return false\n }\n if (data === \"null\") {\n return null\n }\n\n // Only convert to a number if it doesn't change the string\n if (data === `${+data}`) {\n return +data\n }\n\n if (/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/.test(data)) {\n return JSON.parse(data)\n }\n\n return data\n }\n // if no default is passed, then it's undefined and can be replaced with default value later\n // it is recommended to do it in props destructuring assignment phase, ie.:\n // const Chart = ({ dygraphPointsize = 1 }) => ....\n return defaultValue\n}\n\nconst getDataAttributeBoolean = (element: Element, key: string, defaultValue?: boolean) => {\n const value = getDataAttribute(element, key, defaultValue)\n\n if (value === true || value === false) { // gmosx: Love this :)\n return value\n }\n\n if (typeof (value) === \"string\") {\n if (value === \"yes\" || value === \"on\") {\n return true\n }\n\n if (value === \"\" || value === \"no\" || value === \"off\" || value === \"null\") {\n return false\n }\n\n return defaultValue\n }\n\n if (typeof (value) === \"number\") {\n return value !== 0\n }\n\n return defaultValue\n}\n\ninterface BaseAttributeConfig {\n key: string\n defaultValue?: OutputValue\n}\ninterface BooleanAttributeConfig extends BaseAttributeConfig {\n type: \"boolean\"\n defaultValue?: boolean\n}\ntype AttributeConfig = BaseAttributeConfig | BooleanAttributeConfig\n\nexport interface StaticAttributes {\n id: string\n host?: string | undefined\n httpMethod?: Method\n title?: string\n chartLibrary: ChartLibraryName\n width: number | string | null\n height?: number | string | null\n after?: number\n before?: number\n legend?: boolean\n legendPosition?: \"bottom\" | \"right\"\n units?: string\n unitsCommon?: string\n unitsDesired?: string\n aggrMethod?: string\n labels?: {[key: string]: string}\n postGroupBy?: string\n dimensionsAggrMethod?: string\n postAggregationMethod?: string\n aggrGroups?: string[]\n selectedChart?: string\n filteredRows?: string[] | null\n groupBy?: string\n nodeIDs?: string[]\n colors?: string\n commonColors?: string\n decimalDigits?: number\n dimensions?: string\n selectedDimensions?: string[]\n forceTimeWindow?: boolean\n\n appendOptions?: string | undefined\n gtime?: number\n method?: string\n overrideOptions?: string\n pixelsPerPoint?: number\n points?: number\n heightId?: string\n hideResizeHandler?: boolean\n detectResize?: boolean\n commonMin?: string\n commonMax?: string\n\n dygraphType?: string\n dygraphValueRange?: any[]\n dygraphTheme?: string\n dygraphSmooth?: boolean\n dygraphColors?: string[]\n dygraphRightGap?: number\n dygraphShowRangeSelector?: boolean\n dygraphShowRoller?: boolean\n dygraphTitle?: string\n dygraphTitleHeight?: number\n dygraphLegend?: \"always\" | \"follow\" | \"onmouseover\" | \"never\"\n dygraphLabelsDiv?: string\n dygraphLabelsSeparateLine?: boolean\n dygraphIncludeZero?: boolean\n dygraphShowZeroValues?: boolean\n dygraphShowLabelsOnHighLight?: boolean\n dygraphHideOverlayOnMouseOut?: boolean\n dygraphXRangePad?: number\n dygraphYRangePad?: number\n dygraphYLabelWidth?: number\n dygraphStrokeWidth?: number\n dygraphStrokePattern?: number[]\n dygraphDrawPoints?: boolean\n dygraphDrawGapEdgePoints?: boolean\n dygraphConnectSeparatedPoints?: boolean\n dygraphPointSize?: number\n dygraphStepPlot?: boolean\n dygraphStrokeBorderColor?: string\n dygraphStrokeBorderWidth?: number\n dygraphFillGraph?: boolean\n dygraphFillAlpha?: number\n dygraphStackedGraph?: boolean\n dygraphStackedGraphNanFill?: string\n dygraphAxisLabelFontSize?: number\n dygraphAxisLineColor?: string\n dygraphAxisLineWidth?: number\n dygraphDrawGrid?: boolean\n dygraphGridLinePattern?: number[]\n dygraphGridLineWidth?: number\n dygraphGridLineColor?: string\n dygraphMaxNumberWidth?: number\n dygraphSigFigs?: number\n dygraphDigitsAfterDecimal?: number\n dygraphHighlighCircleSize?: number\n dygraphHighlightSeriesOpts?: {[options: string]: number}\n dygraphHighlightSeriesBackgroundAlpha?: number\n dygraphXPixelsPerLabel?: number\n dygraphXAxisLabelWidth?: number\n dygraphDrawXAxis?: boolean\n dygraphYPixelsPerLabel?: number\n dygraphYAxisLabelWidth?: number\n dygraphDrawYAxis?: boolean\n dygraphDrawAxis?: boolean\n\n easyPieChartMinValue?: number\n easyPieChartMaxValue?: number\n easyPieChartBarColor?: string\n easyPieChartTrackColor?: string\n easyPieChartScaleColor?: string,\n easyPieChartScaleLength?: number,\n easyPieChartLineCap?: string,\n easyPieChartLineWidth?: string,\n easyPieChartTrackWidth?: string,\n easyPieChartSize?: string,\n easyPieChartRotate?: number,\n easyPieChartAnimate?: string,\n easyPieChartEasing?: string,\n\n gaugeMinValue?: number,\n gaugeMaxValue?: number,\n gaugePointerColor?: string,\n gaugeStrokeColor?: string,\n gaugeStartColor?: string,\n gaugeStopColor?: string,\n gaugeGenerateGradient?: boolean | string[],\n\n sparklineType?: string,\n sparklineLineColor?: string,\n sparklineFillColor?: string,\n sparklineChartRangeMin?: string,\n sparklineChartRangeMax?: string,\n sparklineComposite?: string,\n sparklineEnableTagOptions?: string,\n sparklineTagOptionPrefix?: string,\n sparklineTagValuesAttribute?: string,\n sparklineDisableHiddenCheck?: string,\n sparklineDefaultPixelsPerValue?: string,\n sparklineSpotColor?: string,\n sparklineMinSpotColor?: string,\n sparklineMaxSpotColor?: string,\n sparklineSpotRadius?: string,\n sparklineValueSpots?: string,\n sparklineHighlightSpotColor?: string,\n sparklineHighlightLineColor?: string,\n sparklineLineWidth?: string,\n sparklineNormalRangeMin?: string,\n sparklineNormalRangeMax?: string,\n sparklineDrawNormalOnTop?: string,\n sparklineXvalues?: string,\n sparklineChartRangeClip?: string,\n sparklineChartRangeMinX?: string,\n sparklineChartRangeMaxX?: string,\n sparklineDisableInteraction?: boolean,\n sparklineDisableTooltips?: boolean,\n sparklineOnHover?: Function,\n sparklineDisableHighlight?: boolean,\n sparklineHighlightLighten?: string,\n sparklineHighlightColor?: string,\n sparklineTooltipContainer?: string,\n sparklineTooltipClassname?: string,\n sparklineTooltipFormat?: string,\n sparklineTooltipPrefix?: string,\n sparklineTooltipSuffix?: string,\n sparklineTooltipSkipNull?: boolean,\n sparklineTooltipValueLookups?: string,\n sparklineTooltipFormatFieldlist?: string,\n sparklineTooltipFormatFieldlistKey?: string,\n sparklineNumberFormatter?: (d: number) => string,\n sparklineNumberDigitGroupSep?: string,\n sparklineNumberDecimalMark?: string,\n sparklineNumberDigitGroupCount?: string,\n sparklineAnimatedZooms?: boolean,\n\n\n d3pieTitle?: string,\n d3pieSubtitle?: string,\n d3pieFooter?: string,\n d3pieTitleColor?: string,\n d3pieTitleFontsize?: string,\n d3pieTitleFontweight?: string,\n d3pieTitleFont?: string,\n d3PieSubtitleColor?: string,\n d3PieSubtitleFontsize?: string,\n d3PieSubtitleFontweight?: string,\n d3PieSubtitleFont?: string,\n d3PieFooterColor?: string,\n d3PieFooterFontsize?: string,\n d3PieFooterFontweight?: string,\n d3PieFooterFont?: string,\n d3PieFooterLocation?: string,\n d3PiePieinnerradius?: string,\n d3PiePieouterradius?: string,\n d3PieSortorder?: string,\n d3PieSmallsegmentgroupingEnabled?: boolean,\n d3PieSmallsegmentgroupingValue?: string,\n d3PieSmallsegmentgroupingValuetype?: string,\n d3PieSmallsegmentgroupingLabel?: string,\n d3PieSmallsegmentgroupingColor?: string,\n d3PieLabelsOuterFormat?: string,\n d3PieLabelsOuterHidewhenlessthanpercentage?: string,\n d3PieLabelsOuterPiedistance?: string,\n d3PieLabelsInnerFormat?: string,\n d3PieLabelsInnerHidewhenlessthanpercentage?: string,\n d3PieLabelsMainLabelColor?: string,\n d3PieLabelsMainLabelFont?: string,\n d3PieLabelsMainLabelFontsize?: string,\n d3PieLabelsMainLabelFontweight?: string,\n d3PieLabelsPercentageColor?: string,\n d3PieLabelsPercentageFont?: string,\n d3PieLabelsPercentageFontsize?: string,\n d3PieLabelsPercentageFontweight?: string,\n d3PieLabelsValueColor?: string,\n d3PieLabelsValueFont?: string,\n d3PieLabelsValueFontsize?: string,\n d3PieLabelsValueFontweight?: string,\n d3PieLabelsLinesEnabled?: boolean,\n d3PieLabelsLinesStyle?: string,\n d3PieLabelsLinesColor?: string,\n d3PieLabelsTruncationEnabled?: boolean,\n d3PieLabelsTruncationTruncatelength?: string,\n d3PieMiscColorsSegmentstroke?: string,\n d3PieMiscGradientEnabled?: boolean,\n d3PieMiscColorsPercentage?: string,\n d3PieMiscGradientColor?: string,\n d3PieCssprefix?: string,\n\n peityStrokeWidth?: number,\n\n textOnlyDecimalPlaces?: number,\n textOnlyPrefix?: string,\n textOnlySuffix?: string,\n}\n\nexport interface Attributes extends StaticAttributes {\n // changed structure compared to original dashboard.js (not flat list, but dynamic objects stored\n // in \"showValueOf\" property\n showValueOf?: { [key: string]: string }\n}\n\nexport interface ChartsAttributes {\n [chartID:string]: Attributes\n}\n\nexport type AttributePropKeys = keyof StaticAttributes\n\ntype AttributesMap = {\n [key in AttributePropKeys]: AttributeConfig\n}\n\n// needs to be a getter so all window.NETDATA settings are set\nconst getAttributesMap = (): AttributesMap => ({\n // all properties that don't have `defaultValue` should be \"| undefined\" in Attributes interface\n // todo try to write above rule in TS\n id: { key: \"netdata\" },\n host: { key: \"host\" },\n httpMethod: { key: \"http-method\" },\n title: { key: \"title\" },\n chartLibrary: { key: \"chart-library\", defaultValue: window.NETDATA.chartDefaults.library },\n width: { key: \"width\", defaultValue: window.NETDATA.chartDefaults.width },\n height: { key: \"height\", defaultValue: window.NETDATA.chartDefaults.height },\n // todo use chartDefaults for static custom dashboards\n // after: { key: \"after\", defaultValue: window.NETDATA.chartDefaults.after },\n after: { key: \"after\" },\n before: { key: \"before\", defaultValue: window.NETDATA.chartDefaults.before },\n legend: { key: \"legend\", type: \"boolean\", defaultValue: true },\n legendPosition: { key: \"legend-position\" },\n units: { key: \"units\" },\n unitsCommon: { key: \"common-units\" },\n unitsDesired: { key: \"desired-units\" },\n aggrMethod: { key: \"aggr-method\" },\n labels: { key: \"labels\" },\n postGroupBy: { key: \"post-group-by\" },\n postAggregationMethod: { key: \"post-aggregation-method\" },\n dimensionsAggrMethod: { key: \"dimensions-aggr-method\" },\n aggrGroups: { key: \"aggrGroups\" },\n selectedChart: { key: \"selected-chart\" },\n filteredRows: { key: \"filtered-rows\" },\n groupBy: { key: \"group-by\" },\n nodeIDs: { key: \"node-ids\" },\n colors: { key: \"colors\" },\n commonColors: { key: \"common-colors\" },\n decimalDigits: { key: \"decimal-digits\" },\n dimensions: { key: \"dimensions\" },\n selectedDimensions: { key: \"selected-dimensions\" },\n forceTimeWindow: { key: \"force-time-window\" },\n\n appendOptions: { key: \"append-options\" },\n gtime: { key: \"gtime\" },\n method: { key: \"method\" },\n overrideOptions: { key: \"override-options\" },\n pixelsPerPoint: { key: \"pixels-per-point\" },\n points: { key: \"points\" },\n heightId: { key: \"id\" },\n hideResizeHandler: { key: \"hide-resize-handler\" },\n detectResize: { key: \"detect-resize\" },\n commonMin: { key: \"common-min\" },\n commonMax: { key: \"common-max\" },\n\n // let's not put the default values here, because they will also be needed by the main Agent page\n // and the Cloud App\n dygraphType: { key: \"dygraph-type\" },\n dygraphValueRange: { key: \"dygraph-valuerange\" },\n dygraphTheme: { key: \"dygraph-theme\" },\n dygraphSmooth: { key: \"dygraph-smooth\", type: \"boolean\" },\n dygraphColors: { key: \"dygraph-colors\" }, // not working in original dashboard\n dygraphRightGap: { key: \"dygraph-rightgap\" },\n dygraphShowRangeSelector: { key: \"dygraph-showrangeselector\", type: \"boolean\" },\n dygraphShowRoller: { key: \"dygraph-showroller\", type: \"boolean\" },\n dygraphTitle: { key: \"dygraph-title\" },\n dygraphTitleHeight: { key: \"dygraph-titleheight\" },\n dygraphLegend: { key: \"dygraph-legend\" },\n dygraphLabelsDiv: { key: \"dygraph-labelsdiv\" },\n dygraphLabelsSeparateLine: { key: \"dygraph-labelsseparatelines\", type: \"boolean\" },\n dygraphIncludeZero: { key: \"dygraph-includezero\", type: \"boolean\" },\n dygraphShowZeroValues: { key: \"dygraph-labelsshowzerovalues\", type: \"boolean\" },\n dygraphShowLabelsOnHighLight: { key: \"dygraph-showlabelsonhighlight\", type: \"boolean\" },\n dygraphHideOverlayOnMouseOut: { key: \"dygraph-hideoverlayonmouseout\", type: \"boolean\" },\n dygraphXRangePad: { key: \"dygraph-xrangepad\" },\n dygraphYRangePad: { key: \"dygraph-yrangepad\" },\n dygraphYLabelWidth: { key: \"dygraph-ylabelwidth\" },\n dygraphStrokeWidth: { key: \"dygraph-strokewidth\" },\n dygraphStrokePattern: { key: \"dygraph-strokepattern\" },\n dygraphDrawPoints: { key: \"dygraph-drawpoints\", type: \"boolean\" },\n dygraphDrawGapEdgePoints: { key: \"dygraph-drawgapedgepoints\", type: \"boolean\" },\n dygraphConnectSeparatedPoints: { key: \"dygraph-connectseparatedpoints\", type: \"boolean\" },\n dygraphPointSize: { key: \"dygraph-pointsize\" },\n dygraphStepPlot: { key: \"dygraph-stepplot\", type: \"boolean\" },\n dygraphStrokeBorderColor: { key: \"dygraph-strokebordercolor\" },\n dygraphStrokeBorderWidth: { key: \"dygraph-strokeborderwidth\" },\n // it was not boolean in the old app, but that was most likely a bug\n dygraphFillGraph: { key: \"dygraph-fillgraph\", type: \"boolean\" },\n dygraphFillAlpha: { key: \"dygraph-fillalpha\" },\n // also originally not set as boolean\n dygraphStackedGraph: { key: \"dygraph-stackedgraph\", type: \"boolean\" },\n dygraphStackedGraphNanFill: { key: \"dygraph-stackedgraphnanfill\" },\n dygraphAxisLabelFontSize: { key: \"dygraph-axislabelfontsize\" },\n dygraphAxisLineColor: { key: \"dygraph-axislinecolor\" },\n dygraphAxisLineWidth: { key: \"dygraph-axislinewidth\" },\n dygraphDrawGrid: { key: \"dygraph-drawgrid\", type: \"boolean\" },\n dygraphGridLinePattern: { key: \"dygraph-gridlinepattern\" },\n dygraphGridLineWidth: { key: \"dygraph-gridlinewidth\" },\n dygraphGridLineColor: { key: \"dygraph-gridlinecolor\" },\n dygraphMaxNumberWidth: { key: \"dygraph-maxnumberwidth\" },\n dygraphSigFigs: { key: \"dygraph-sigfigs\" },\n dygraphDigitsAfterDecimal: { key: \"dygraph-digitsafterdecimal\" },\n // dygraphValueFormatter: { key: \"dygraph-valueformatter\" },\n dygraphHighlighCircleSize: { key: \"dygraph-highlightcirclesize\" },\n dygraphHighlightSeriesOpts: { key: \"dygraph-highlightseriesopts\" },\n dygraphHighlightSeriesBackgroundAlpha: { key: \"dygraph-highlightseriesbackgroundalpha\" },\n // dygraphPointClickCallback: { key: \"dygraph-pointclickcallback\" },\n dygraphXPixelsPerLabel: { key: \"dygraph-xpixelsperlabel\" },\n dygraphXAxisLabelWidth: { key: \"dygraph-xaxislabelwidth\" },\n dygraphDrawXAxis: { key: \"dygraph-drawxaxis\", type: \"boolean\" },\n dygraphYPixelsPerLabel: { key: \"dygraph-ypixelsperlabel\" },\n dygraphYAxisLabelWidth: { key: \"dygraph-yaxislabelwidth\" },\n dygraphDrawYAxis: { key: \"dygraph-drawyaxis\", type: \"boolean\" },\n dygraphDrawAxis: { key: \"dygraph-drawaxis\", type: \"boolean\" },\n\n easyPieChartMinValue: { key: \"easypiechart-min-value\" },\n easyPieChartMaxValue: { key: \"easypiechart-max-value\" },\n easyPieChartBarColor: { key: \"easypiechart-barcolor\" },\n easyPieChartTrackColor: { key: \"easypiechart-trackcolor\" },\n easyPieChartScaleColor: { key: \"easypiechart-scalecolor\" },\n easyPieChartScaleLength: { key: \"easypiechart-scalelength\" },\n easyPieChartLineCap: { key: \"easypiechart-linecap\" },\n easyPieChartLineWidth: { key: \"easypiechart-linewidth\" },\n easyPieChartTrackWidth: { key: \"easypiechart-trackwidth\" },\n easyPieChartSize: { key: \"easypiechart-size\" },\n easyPieChartRotate: { key: \"easypiechart-rotate\" },\n easyPieChartAnimate: { key: \"easypiechart-animate\" },\n easyPieChartEasing: { key: \"easypiechart-easing\" },\n\n gaugeMinValue: { key: \"gauge-min-value\" },\n gaugeMaxValue: { key: \"gauge-max-value\" },\n gaugePointerColor: { key: \"gauge-pointer-color\" },\n gaugeStrokeColor: { key: \"gauge-stroke-color\" },\n gaugeStartColor: { key: \"gauge-start-color\" },\n gaugeStopColor: { key: \"gauge-stop-color\" },\n gaugeGenerateGradient: { key: \"gauge-generate-gradient\" },\n\n sparklineType: { key: \"sparkline-type\" },\n sparklineLineColor: { key: \"sparkline-linecolor\" },\n sparklineFillColor: { key: \"sparkline-fillcolor\" },\n sparklineChartRangeMin: { key: \"sparkline-chartrangemin\" },\n sparklineChartRangeMax: { key: \"sparkline-chartrangemax\" },\n sparklineComposite: { key: \"sparkline-composite\" },\n sparklineEnableTagOptions: { key: \"sparkline-enabletagoptions\" },\n sparklineTagOptionPrefix: { key: \"sparkline-tagoptionprefix\" },\n sparklineTagValuesAttribute: { key: \"sparkline-tagvaluesattribute\" },\n sparklineDisableHiddenCheck: { key: \"sparkline-disablehiddencheck\" },\n sparklineDefaultPixelsPerValue: { key: \"sparkline-defaultpixelspervalue\" },\n sparklineSpotColor: { key: \"sparkline-spotcolor\" },\n sparklineMinSpotColor: { key: \"sparkline-minspotcolor\" },\n sparklineMaxSpotColor: { key: \"sparkline-maxspotcolor\" },\n sparklineSpotRadius: { key: \"sparkline-spotradius\" },\n sparklineValueSpots: { key: \"sparkline-valuespots\" },\n sparklineHighlightSpotColor: { key: \"sparkline-highlightspotcolor\" },\n sparklineHighlightLineColor: { key: \"sparkline-highlightlinecolor\" },\n sparklineLineWidth: { key: \"sparkline-linewidth\" },\n sparklineNormalRangeMin: { key: \"sparkline-normalrangemin\" },\n sparklineNormalRangeMax: { key: \"sparkline-normalrangemax\" },\n sparklineDrawNormalOnTop: { key: \"sparkline-drawnormalontop\" },\n sparklineXvalues: { key: \"sparkline-xvalues\" },\n sparklineChartRangeClip: { key: \"sparkline-chartrangeclip\" },\n sparklineChartRangeMinX: { key: \"sparkline-chartrangeminx\" },\n sparklineChartRangeMaxX: { key: \"sparkline-chartrangemaxx\" },\n sparklineDisableInteraction: { key: \"sparkline-disableinteraction\", type: \"boolean\" },\n sparklineDisableTooltips: { key: \"sparkline-disabletooltips\", type: \"boolean\" },\n sparklineOnHover: { key: \"sparkline-on-hover\" },\n sparklineDisableHighlight: { key: \"sparkline-disablehighlight\", type: \"boolean\" },\n sparklineHighlightLighten: { key: \"sparkline-highlightlighten\" },\n sparklineHighlightColor: { key: \"sparkline-highlightcolor\" },\n sparklineTooltipContainer: { key: \"sparkline-tooltipcontainer\" },\n sparklineTooltipClassname: { key: \"sparkline-tooltipclassname\" },\n sparklineTooltipFormat: { key: \"sparkline-tooltipformat\" },\n sparklineTooltipPrefix: { key: \"sparkline-tooltipprefix\" },\n sparklineTooltipSuffix: { key: \"sparkline-tooltipsuffix\" },\n sparklineTooltipSkipNull: { key: \"sparkline-tooltipskipnull\", type: \"boolean\" },\n sparklineTooltipValueLookups: { key: \"sparkline-tooltipvaluelookups\" },\n sparklineTooltipFormatFieldlist: { key: \"sparkline-tooltipformatfieldlist\" },\n sparklineTooltipFormatFieldlistKey: { key: \"sparkline-tooltipformatfieldlistkey\" },\n sparklineNumberFormatter: { key: \"sparkline-numberformatter\" },\n sparklineNumberDigitGroupSep: { key: \"sparkline-numberdigitgroupsep\" },\n sparklineNumberDecimalMark: { key: \"sparkline-numberdecimalmark\" },\n sparklineNumberDigitGroupCount: { key: \"sparkline-numberdigitgroupcount\" },\n sparklineAnimatedZooms: { key: \"sparkline-animatedzooms\", type: \"boolean\" },\n\n d3pieTitle: { key: \"d3pie-title\" },\n d3pieSubtitle: { key: \"d3pie-subtitle\" },\n d3pieFooter: { key: \"d3pie-footer\" },\n d3pieTitleColor: { key: \"d3pie-title-color\" },\n d3pieTitleFontsize: { key: \"d3pie-title-fontsize\" },\n d3pieTitleFontweight: { key: \"d3pie-title-fontweight\" },\n d3pieTitleFont: { key: \"d3pie-title-font\" },\n d3PieSubtitleColor: { key: \"d3pie-subtitle-color\" },\n d3PieSubtitleFontsize: { key: \"d3pie-subtitle-fontsize\" },\n d3PieSubtitleFontweight: { key: \"d3pie-subtitle-fontweight\" },\n d3PieSubtitleFont: { key: \"d3pie-subtitle-font\" },\n d3PieFooterColor: { key: \"d3pie-footer-color\" },\n d3PieFooterFontsize: { key: \"d3pie-footer-fontsize\" },\n d3PieFooterFontweight: { key: \"d3pie-footer-fontweight\" },\n d3PieFooterFont: { key: \"d3pie-footer-font\" },\n d3PieFooterLocation: { key: \"d3pie-footer-location\" },\n d3PiePieinnerradius: { key: \"d3pie-pieinnerradius\" },\n d3PiePieouterradius: { key: \"d3pie-pieouterradius\" },\n d3PieSortorder: { key: \"d3pie-sortorder\" },\n d3PieSmallsegmentgroupingEnabled: { key: \"d3pie-smallsegmentgrouping-enabled\", type: \"boolean\" },\n d3PieSmallsegmentgroupingValue: { key: \"d3pie-smallsegmentgrouping-value\" },\n d3PieSmallsegmentgroupingValuetype: { key: \"d3pie-smallsegmentgrouping-valuetype\" },\n d3PieSmallsegmentgroupingLabel: { key: \"d3pie-smallsegmentgrouping-label\" },\n d3PieSmallsegmentgroupingColor: { key: \"d3pie-smallsegmentgrouping-color\" },\n d3PieLabelsOuterFormat: { key: \"d3pie-labels-outer-format\" },\n d3PieLabelsOuterHidewhenlessthanpercentage: {\n key: \"d3pie-labels-outer-hidewhenlessthanpercentage\",\n },\n d3PieLabelsOuterPiedistance: { key: \"d3pie-labels-outer-piedistance\" },\n d3PieLabelsInnerFormat: { key: \"d3pie-labels-inner-format\" },\n d3PieLabelsInnerHidewhenlessthanpercentage: {\n key: \"d3pie-labels-inner-hidewhenlessthanpercentage\",\n },\n d3PieLabelsMainLabelColor: { key: \"d3pie-labels-mainLabel-color\" },\n d3PieLabelsMainLabelFont: { key: \"d3pie-labels-mainLabel-font\" },\n d3PieLabelsMainLabelFontsize: { key: \"d3pie-labels-mainLabel-fontsize\" },\n d3PieLabelsMainLabelFontweight: { key: \"d3pie-labels-mainLabel-fontweight\" },\n d3PieLabelsPercentageColor: { key: \"d3pie-labels-percentage-color\" },\n d3PieLabelsPercentageFont: { key: \"d3pie-labels-percentage-font\" },\n d3PieLabelsPercentageFontsize: { key: \"d3pie-labels-percentage-fontsize\" },\n d3PieLabelsPercentageFontweight: { key: \"d3pie-labels-percentage-fontweight\" },\n d3PieLabelsValueColor: { key: \"d3pie-labels-value-color\" },\n d3PieLabelsValueFont: { key: \"d3pie-labels-value-font\" },\n d3PieLabelsValueFontsize: { key: \"d3pie-labels-value-fontsize\" },\n d3PieLabelsValueFontweight: { key: \"d3pie-labels-value-fontweight\" },\n d3PieLabelsLinesEnabled: { key: \"d3pie-labels-lines-enabled\", type: \"boolean\" },\n d3PieLabelsLinesStyle: { key: \"d3pie-labels-lines-style\" },\n d3PieLabelsLinesColor: { key: \"d3pie-labels-lines-color\" },\n d3PieLabelsTruncationEnabled: { key: \"d3pie-labels-truncation-enabled\", type: \"boolean\" },\n d3PieLabelsTruncationTruncatelength: { key: \"d3pie-labels-truncation-truncatelength\" },\n d3PieMiscColorsSegmentstroke: { key: \"d3pie-misc-colors-segmentstroke\" },\n d3PieMiscGradientEnabled: { key: \"d3pie-misc-gradient-enabled\", type: \"boolean\" },\n d3PieMiscColorsPercentage: { key: \"d3pie-misc-colors-percentage\" },\n d3PieMiscGradientColor: { key: \"d3pie-misc-gradient-color\" },\n d3PieCssprefix: { key: \"d3pie-cssprefix\" },\n\n peityStrokeWidth: { key: \"peity-strokewidth\" },\n\n textOnlyDecimalPlaces: { key: \"textonly-decimal-places\" },\n textOnlyPrefix: { key: \"textonly-prefix\" },\n textOnlySuffix: { key: \"textonly-suffix\" },\n})\n\nexport const getAttributesStatic = (node: Element): Attributes => mapObjIndexed(\n (attribute: AttributeConfig) => (\n (attribute as BooleanAttributeConfig).type === \"boolean\"\n ? getDataAttributeBoolean(\n node,\n attribute.key,\n attribute.defaultValue as BooleanAttributeConfig[\"defaultValue\"],\n ) : getDataAttribute(node, attribute.key, attribute.defaultValue)\n ),\n getAttributesMap(),\n) as Attributes // need to override because of broken Ramda typings\n\nexport const getAttributesDynamic = (node: Element) => {\n const showValueOfAttribues = Array.from(node.attributes)\n .filter((attribute) => attribute.name.startsWith(\"data-show-value-of\"))\n .map((attribute) => ({\n [attribute.name.replace(\"data-\", \"\")]: attribute.value,\n }))\n const merged = mergeAll(showValueOfAttribues)\n return isEmpty(merged) ? undefined : merged\n}\n\nexport const getAttributes = (node: Element): Attributes => {\n const attributesStatic = getAttributesStatic(node)\n const showValueOf = getAttributesDynamic(node)\n return { ...attributesStatic, showValueOf }\n}\n\nexport const defaultAttributes: Partial<Attributes> = {\n legendPosition: initialLegendRight ? \"right\" : \"bottom\",\n}\n","import { createAction } from \"redux-act\"\nimport { CancelTokenSource, Method } from \"axios\"\n\nimport { createRequestAction } from \"utils/createRequestAction\"\nimport { InfoPayload } from \"domains/global/__mocks__/info-mock\"\n\nimport { storeKey } from \"./constants\"\nimport { ChartData, ChartMetadata } from \"./chart-types\"\n\nexport interface UpdateChartDataAction {\n chartData: ChartData\n id: string\n}\nexport const updateChartDataAction = createAction<UpdateChartDataAction>(\n `${storeKey}/updateChartData`,\n)\n\nexport interface UpdateChartMetadataAction {\n chartMetadata: ChartMetadata\n id: string\n}\nexport const updateChartMetadataAction = createAction<UpdateChartMetadataAction>(\n `${storeKey}/updateChartMetadata`,\n)\n\nexport interface FetchDataParams {\n fillMissingPoints?: number\n isRemotelyControlled: boolean\n viewRange: [number, number]\n}\nexport interface FetchDataUrlParams {\n host: string\n chart: string\n context: string\n format: string\n points: number\n group: string\n gtime: number\n options: string\n after: number | null\n before?: number | null\n dimensions?: string\n labels?: {[key: string]: string}\n postGroupBy?: string\n postAggregationMethod?: string\n aggrMethod?: string\n aggrGroups?: string[]\n dimensionsAggrMethod?: string\n nodeIDs?: string[]\n httpMethod?: Method\n groupBy?: string\n}\nexport interface FetchDataPayload extends FetchDataUrlParams {\n id: string,\n fetchDataParams: FetchDataParams\n cancelTokenSource: CancelTokenSource\n}\n\nexport const fetchDataAction = createRequestAction<\n FetchDataPayload,\n { id: string, chartData: ChartData, fetchDataParams: FetchDataParams }\n>(`${storeKey}/fetchDataAction`)\n\n\nexport interface FetchDataCancelAction { id: string }\nexport const fetchDataCancelAction = createAction<FetchDataCancelAction>(\n `${storeKey}/fetchDataCancelAction`,\n)\n\nexport interface FetchDataForSnapshotPayload extends FetchDataUrlParams {\n chartLibrary: string\n id: string\n}\nexport const fetchDataForSnapshotAction = createRequestAction<\n FetchDataForSnapshotPayload,\n { id: string, snapshotData: ChartData }\n>(`${storeKey}/fetchDataForSnapshotAction`)\n\nexport const snapshotExportResetAction = createRequestAction(\n `${storeKey}/snapshotExportResetAction`,\n)\n\nexport interface FetchChartPayload {\n chart: string\n id: string\n host: string\n nodeIDs?: string[]\n}\n\nexport const fetchChartAction = createRequestAction<\n FetchChartPayload,\n { chartMetadata: ChartMetadata, id: string }\n>(`${storeKey}/fetchChartAction`)\n\n\nexport interface SetResizeHeightAction {\n id: string\n resizeHeight: number\n}\nexport const setResizeHeightAction = createAction<SetResizeHeightAction>(\n `${storeKey}/setResizeHeight`,\n)\n\nexport interface SetChartPanAndZoomAction {\n id: string\n after: number\n before: number\n shouldForceTimeRange?: boolean\n}\nexport const setChartPanAndZoomAction = createAction<SetChartPanAndZoomAction>(\n `${storeKey}/setChartPanAndZoom`,\n)\n\nexport const resetChartPanAndZoomAction = createAction<{ id: string }>(\n `${storeKey}/resetChartPanAndZoomAction`,\n)\n\nexport const clearChartStateAction = createAction<{ id: string }>(\n `${storeKey}/clearChartStateAction`,\n)\n\nexport interface FetchInfoPayload {\n poll?: boolean\n}\nexport interface FetchInfoSuccessPayload {\n isCloudAvailable: boolean\n isCloudEnabled: boolean\n isAgentClaimed: boolean\n isACLKAvailable: boolean\n fullInfoPayload: InfoPayload\n}\nexport const fetchInfoAction = createRequestAction<\n FetchInfoPayload,\n FetchInfoSuccessPayload\n>(`${storeKey}/fetchInfoAction`)\n","/* eslint-disable */\n// Main JavaScript file for the Netdata GUI.\n\n// Codacy declarations\n/* global NETDATA */\n\nimport { identity, memoizeWith } from \"ramda\"\nimport {\n centerAroundHighlightAction,\n chartsMetadataRequestSuccess,\n clearHighlightAction,\n fetchAllAlarmsAction,\n loadSnapshotAction,\n resetGlobalPanAndZoomAction,\n resetOptionsAction,\n resetRegistry,\n setDefaultAfterAction,\n setGlobalChartUnderlayAction,\n setGlobalPanAndZoomAction,\n setOptionAction,\n} from './domains/global/actions';\nimport {\n createSelectOption,\n selectDefaultAfter,\n selectGlobalPanAndZoom,\n selectRegistry,\n} from \"./domains/global/selectors\"\nimport { seconds4human } from './domains/chart/utils/seconds4human';\nimport { zeropad } from './utils/units-conversion';\nimport {\n explicitlySignInAction,\n startSnapshotModeAction,\n stopSnapshotModeAction,\n} from './domains/dashboard/actions';\nimport { snapshotExportResetAction } from './domains/chart/actions';\nimport {\n selectAmountOfCharts,\n selectAmountOfSnapshotsFailed,\n selectAmountOfSnapshotsFetched,\n} from './domains/chart/selectors';\nimport { serverDefault } from './utils/server-detection';\nimport { name2id } from './utils/name-2-id';\nimport { isProperTimezone } from './utils/date-time';\nimport { NETDATA_REGISTRY_SERVER } from './utils';\nimport { getHashParam } from 'utils/hash-utils';\nimport { isDemo } from \"./utils/is-demo\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from './domains/chart/utils/legend-utils';\nimport { defaultAttributes } from './domains/chart/utils/transformDataAttributes';\n\n// this is temporary, hook will be used after the full main.js refactor\nlet localeDateString, localeTimeString\nexport const updateLocaleFunctions = ({\n localeDateString: newLocaleDateString,\n localeTimeString: newLocaleTimeString,\n}) => {\n localeDateString = newLocaleDateString\n localeTimeString = newLocaleTimeString\n}\n\n// enable alarms checking and notifications\nvar netdataShowAlarms = true;\n\n// enable registry updates\nvar netdataRegistry = true;\n\n// forward definition only - not used here\nvar netdataServer = undefined;\nvar netdataServerStatic = undefined;\nvar netdataCheckXSS = undefined;\n\nlet reduxStore\n\nfunction escapeUserInputHTML(s) {\n return s.toString()\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/#/g, '&#35;')\n .replace(/'/g, '&#39;')\n .replace(/\\(/g, '&#40;')\n .replace(/\\)/g, '&#41;')\n .replace(/\\//g, '&#47;');\n}\n\nconst setOption = (key, value) => {\n reduxStore.dispatch(setOptionAction({\n key,\n value,\n }))\n}\n\n// temporary function that will be removed after full main.js migration to react\nconst getFromRegistry = (prop) => {\n const registry = selectRegistry(reduxStore.getState())\n return registry?.[prop]\n}\n\nfunction verifyURL(s) {\n if (typeof (s) === 'string' && (s.startsWith('http://') || s.startsWith('https://'))) {\n return s\n .replace(/'/g, '%22')\n .replace(/\"/g, '%27')\n .replace(/\\)/g, '%28')\n .replace(/\\(/g, '%29');\n }\n\n console.log('invalid URL detected:');\n console.log(s);\n return 'javascript:alert(\"invalid url\");';\n}\n\n// --------------------------------------------------------------------\n// urlOptions\n\nwindow.urlOptions = {\n hash: '#',\n theme: null,\n help: null,\n mode: 'live', // 'live', 'print'\n update_always: false,\n pan_and_zoom: false,\n server: null,\n after: getHashParam('after') ?? 0,\n before: getHashParam('before') ?? 0,\n highlight: false,\n highlight_after: 0,\n highlight_before: 0,\n nowelcome: false,\n show_alarms: false,\n chart: null,\n family: null,\n alarm: null,\n utc: null,\n\n hasProperty: function (property) {\n // console.log('checking property ' + property + ' of type ' + typeof(this[property]));\n return typeof this[property] !== 'undefined';\n },\n\n genHash: function (forReload) {\n var hash = urlOptions.hash;\n\n hash += ';after=' + urlOptions.after.toString() +\n ';before=' + urlOptions.before.toString();\n\n if (urlOptions.highlight === true) {\n hash += ';highlight_after=' + urlOptions.highlight_after.toString() +\n ';highlight_before=' + urlOptions.highlight_before.toString();\n }\n\n if (urlOptions.theme !== null) {\n hash += ';theme=' + urlOptions.theme.toString();\n }\n\n if (urlOptions.help !== null) {\n hash += ';help=' + urlOptions.help.toString();\n }\n\n if (urlOptions.update_always === true) {\n hash += ';update_always=true';\n }\n\n if (forReload === true && urlOptions.server !== null) {\n hash += ';server=' + urlOptions.server.toString();\n }\n\n if (urlOptions.mode !== 'live') {\n hash += ';mode=' + urlOptions.mode;\n }\n\n if (urlOptions.utc !== null) {\n hash += ';utc=' + urlOptions.utc;\n }\n\n return hash;\n },\n\n parseHash: function () {\n var variables = document.location.hash.split(';');\n var len = variables.length;\n while (len--) {\n if (len !== 0) {\n var p = variables[len].split('=');\n if (urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined') {\n urlOptions[p[0]] = decodeURIComponent(p[1]);\n }\n } else {\n if (variables[len].length > 0) {\n urlOptions.hash = variables[len];\n }\n }\n }\n\n var booleans = ['nowelcome', 'show_alarms', 'update_always'];\n len = booleans.length;\n while (len--) {\n if (urlOptions[booleans[len]] === 'true' || urlOptions[booleans[len]] === true || urlOptions[booleans[len]] === '1' || urlOptions[booleans[len]] === 1) {\n urlOptions[booleans[len]] = true;\n } else {\n urlOptions[booleans[len]] = false;\n }\n }\n\n var numeric = ['after', 'before', 'highlight_after', 'highlight_before'];\n len = numeric.length;\n while (len--) {\n if (typeof urlOptions[numeric[len]] === 'string') {\n try {\n urlOptions[numeric[len]] = parseInt(urlOptions[numeric[len]]);\n }\n catch (e) {\n console.log('failed to parse URL hash parameter ' + numeric[len]);\n urlOptions[numeric[len]] = 0;\n }\n }\n }\n\n if (urlOptions.server !== null && urlOptions.server !== '') {\n netdataServerStatic = document.location.origin.toString() + document.location.pathname.toString();\n netdataServer = urlOptions.server;\n netdataCheckXSS = true;\n } else {\n urlOptions.server = null;\n }\n\n if (urlOptions.before > 0 && urlOptions.after > 0) {\n urlOptions.pan_and_zoom = true;\n urlOptions.nowelcome = true;\n } else {\n urlOptions.pan_and_zoom = false;\n }\n\n if (urlOptions.highlight_before > 0 && urlOptions.highlight_after > 0) {\n urlOptions.highlight = true;\n } else {\n urlOptions.highlight = false;\n }\n\n switch (urlOptions.mode) {\n case 'print':\n urlOptions.theme = 'white';\n urlOptions.welcome = false;\n urlOptions.help = false;\n urlOptions.show_alarms = false;\n\n if (urlOptions.pan_and_zoom === false) {\n urlOptions.pan_and_zoom = true;\n urlOptions.before = Date.now();\n urlOptions.after = urlOptions.before - 600000;\n }\n\n netdataShowAlarms = false;\n netdataRegistry = false;\n break;\n\n case 'live':\n default:\n urlOptions.mode = 'live';\n break;\n }\n\n // console.log(urlOptions);\n },\n\n hashUpdate: function () {\n history.replaceState(null, '', urlOptions.genHash(true));\n },\n\n netdataPanAndZoomCallback: function (status, after, before) {\n //console.log(1);\n //console.log(new Error().stack);\n\n if (netdataSnapshotData === null) {\n urlOptions.pan_and_zoom = status;\n urlOptions.after = after;\n urlOptions.before = before;\n urlOptions.hashUpdate();\n }\n },\n\n updateUtcParam: function (utc) {\n if (!utc) return\n urlOptions.utc = utc\n urlOptions.hashUpdate();\n },\n\n netdataHighlightCallback: function (status, after, before) {\n if (status === true && (after === null || before === null || after <= 0 || before <= 0 || after >= before)) {\n status = false;\n after = 0;\n before = 0;\n }\n\n if (window.netdataSnapshotData === null) {\n urlOptions.highlight = status;\n } else {\n urlOptions.highlight = false;\n }\n\n urlOptions.highlight_after = Math.round(after);\n urlOptions.highlight_before = Math.round(before);\n urlOptions.hashUpdate();\n\n if (status === true && after > 0 && before > 0 && after < before) {\n var d1 = localeDateString(after);\n var d2 = localeDateString(before);\n if (d1 === d2) {\n d2 = '';\n }\n document.getElementById('navbar-highlight-content').innerHTML =\n '<span class=\"navbar-highlight-bar highlight-tooltip\" onclick=\"urlOptions.showHighlight();\" title=\"restore the highlighted view\" data-toggle=\"tooltip\" data-placement=\"bottom\">'\n + 'highlighted time-frame'\n + ' <b>' + d1 + ' <code>' + localeTimeString(after) + '</code></b> to '\n + ' <b>' + d2 + ' <code>' + localeTimeString(before) + '</code></b>, '\n + 'duration <b>' + seconds4human(Math.round((before - after) / 1000)) + '</b>'\n + '</span>'\n + '<span class=\"navbar-highlight-button-right highlight-tooltip\" onclick=\"urlOptions.clearHighlight();\" title=\"clear the highlighted time-frame\" data-toggle=\"tooltip\" data-placement=\"bottom\"><i class=\"fas fa-times\"></i></span>';\n\n $('.navbar-highlight').show();\n $('.navbar-highlight').width(\"80%\");\n $('.highlight-tooltip').tooltip({\n html: true,\n delay: { show: 500, hide: 0 },\n container: 'body'\n });\n } else {\n $('.navbar-highlight').hide();\n $('.navbar-highlight').width(\"100%\");\n }\n },\n\n clearHighlight: function () {\n reduxStore.dispatch(clearHighlightAction())\n },\n\n showHighlight: function () {\n reduxStore.dispatch(centerAroundHighlightAction())\n }\n};\n\nurlOptions.parseHash();\n\n// --------------------------------------------------------------------\n// check options that should be processed before loading netdata.js\n\nvar localStorageTested = -1;\n\nfunction localStorageTest() {\n if (localStorageTested !== -1) {\n return localStorageTested;\n }\n\n if (typeof Storage !== \"undefined\" && typeof localStorage === 'object') {\n var test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n localStorageTested = true;\n }\n catch (e) {\n console.log(e);\n localStorageTested = false;\n }\n } else {\n localStorageTested = false;\n }\n\n return localStorageTested;\n}\n\nfunction loadLocalStorage(name) {\n var ret = null;\n\n try {\n if (localStorageTest() === true) {\n ret = localStorage.getItem(name);\n } else {\n console.log('localStorage is not available');\n }\n }\n catch (error) {\n console.log(error);\n return null;\n }\n\n if (typeof ret === 'undefined' || ret === null) {\n return null;\n }\n\n // console.log('loaded: ' + name.toString() + ' = ' + ret.toString());\n\n return ret;\n}\n\nfunction saveLocalStorage(name, value) {\n // console.log('saving: ' + name.toString() + ' = ' + value.toString());\n try {\n if (localStorageTest() === true) {\n localStorage.setItem(name, value.toString());\n return true;\n }\n }\n catch (error) {\n console.log(error);\n }\n\n return false;\n}\n\nfunction getTheme(def) {\n if (urlOptions.mode === 'print') {\n return 'white';\n }\n\n var ret = loadLocalStorage('netdataTheme');\n if (typeof ret === 'undefined' || ret === null || ret === 'undefined') {\n return def;\n } else {\n return ret;\n }\n}\n\nfunction setTheme(theme) {\n if (urlOptions.mode === 'print') {\n return false;\n }\n\n if (theme === netdataTheme) {\n return false;\n }\n return saveLocalStorage('netdataTheme', theme);\n}\n\nwindow.netdataTheme = getTheme('slate');\n// this is of course temporary, will be fixed during complete main.js rewrite\nNETDATA.updateTheme()\nvar netdataShowHelp = true;\n\nif (urlOptions.theme !== null) {\n setTheme(urlOptions.theme);\n netdataTheme = urlOptions.theme;\n window.NETDATA.updateTheme()\n} else {\n urlOptions.theme = netdataTheme;\n}\n\nif (urlOptions.help !== null) {\n saveLocalStorage('options.show_help', urlOptions.help);\n netdataShowHelp = urlOptions.help;\n} else {\n urlOptions.help = loadLocalStorage('options.show_help');\n}\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nfunction naturalSortChunkify(t) {\n var tz = [];\n var x = 0, y = -1, n = 0, i, j;\n\n while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n var m = (i >= 48 && i <= 57);\n if (m !== n) {\n tz[++y] = \"\";\n n = m;\n }\n tz[y] += j;\n }\n\n return tz;\n}\n\nfunction naturalSortCompare(a, b) {\n var aa = naturalSortChunkify(a.toLowerCase());\n var bb = naturalSortChunkify(b.toLowerCase());\n\n for (var x = 0; aa[x] && bb[x]; x++) {\n if (aa[x] !== bb[x]) {\n var c = Number(aa[x]), d = Number(bb[x]);\n if (c.toString() === aa[x] && d.toString() === bb[x]) {\n return c - d;\n } else {\n return (aa[x] > bb[x]) ? 1 : -1;\n }\n }\n }\n\n return aa.length - bb.length;\n}\n\n// --------------------------------------------------------------------\n// saving files to client\n\nfunction saveTextToClient(data, filename) {\n var blob = new Blob([data], {\n type: 'application/octet-stream'\n });\n\n var url = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n\n var el = document.getElementById('hiddenDownloadLinks');\n el.innerHTML = '';\n el.appendChild(link);\n\n setTimeout(function () {\n el.removeChild(link);\n URL.revokeObjectURL(url);\n }, 60);\n\n link.click();\n}\n\nfunction saveObjectToClient(data, filename) {\n saveTextToClient(JSON.stringify(data), filename);\n}\n\nfunction netdataURL(url, forReload) {\n if (typeof url === 'undefined')\n // url = document.location.toString();\n {\n url = '';\n }\n\n if (url.indexOf('#') !== -1) {\n url = url.substring(0, url.indexOf('#'));\n }\n\n var hash = urlOptions.genHash(forReload);\n\n // console.log('netdataURL: ' + url + hash);\n\n return url + hash;\n}\n\nfunction netdataReload(url) {\n document.location = verifyURL(netdataURL(url, true));\n\n // since we play with hash\n // this is needed to reload the page\n location.reload();\n}\n\nwindow.gotoHostedModalHandler = (url) => {\n document.location = verifyURL(url + urlOptions.genHash());\n return false;\n}\n\nvar gotoServerValidateRemaining = 0;\nvar gotoServerMiddleClick = false;\nvar gotoServerStop = false;\n\nfunction gotoServerValidateUrl(id, guid, url) {\n var penalty = 0;\n var error = 'failed';\n\n if (document.location.toString().startsWith('http://') && url.toString().startsWith('https://'))\n // we penalize https only if the current url is http\n // to allow the user walk through all its servers.\n {\n penalty = 500;\n } else if (document.location.toString().startsWith('https://') && url.toString().startsWith('http://')) {\n error = 'can\\'t check';\n }\n\n var finalURL = netdataURL(url);\n\n setTimeout(function () {\n document.getElementById('gotoServerList').innerHTML += '<tr><td style=\"padding-left: 20px;\"><a href=\"' + verifyURL(finalURL) + '\" target=\"_blank\">' + escapeUserInputHTML(url) + '</a></td><td style=\"padding-left: 30px;\"><code id=\"' + guid + '-' + id + '-status\">checking...</code></td></tr>';\n\n NETDATA.registryHello(url, function (data) {\n if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) {\n // console.log('OK ' + id + ' URL: ' + url);\n document.getElementById(guid + '-' + id + '-status').innerHTML = \"OK\";\n\n if (!gotoServerStop) {\n gotoServerStop = true;\n\n if (gotoServerMiddleClick) {\n window.open(verifyURL(finalURL), '_blank');\n gotoServerMiddleClick = false;\n const registryMachines = getFromRegistry(\"registryMachines\");\n document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + registryMachines[guid].name + '<br/><a href=\"' + verifyURL(finalURL) + '\">' + escapeUserInputHTML(url) + '</a></b><br/>(check your pop-up blocker if it fails)';\n } else {\n document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + escapeUserInputHTML(url) + '</small>';\n document.location = verifyURL(finalURL);\n $('#gotoServerModal').modal('hide');\n }\n }\n } else {\n if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid) {\n error = 'wrong machine';\n }\n\n document.getElementById(guid + '-' + id + '-status').innerHTML = error;\n gotoServerValidateRemaining--;\n if (gotoServerValidateRemaining <= 0) {\n gotoServerMiddleClick = false;\n document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';\n }\n }\n });\n }, (id * 50) + penalty);\n}\n\nwindow.gotoServerModalHandler = function gotoServerModalHandler(guid) {\n // console.log('goto server: ' + guid);\n\n gotoServerStop = false;\n var checked = {};\n const registryMachines = getFromRegistry(\"registryMachines\");\n var len = registryMachines[guid].alternateUrls.length;\n var count = 0;\n\n document.getElementById('gotoServerResponse').innerHTML = '';\n document.getElementById('gotoServerList').innerHTML = '';\n document.getElementById('gotoServerName').innerHTML = registryMachines[guid].name;\n $('#gotoServerModal').modal('show');\n\n gotoServerValidateRemaining = len;\n while (len--) {\n var url = registryMachines[guid].alternateUrls[len];\n checked[url] = true;\n gotoServerValidateUrl(count++, guid, url);\n }\n\n // When the registry is enabled, if the user's known URLs are not working\n // we consult the registry to get additional URLs.\n setTimeout(function () {\n if (gotoServerStop === false) {\n document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';\n NETDATA.registrySearch(guid, getFromRegistry, function (data) {\n // console.log(data);\n len = data.urls.length;\n while (len--) {\n var url = data.urls[len][1];\n // console.log(url);\n if (typeof checked[url] === 'undefined') {\n gotoServerValidateRemaining++;\n checked[url] = true;\n gotoServerValidateUrl(count++, guid, url);\n }\n }\n });\n }\n }, 2000);\n\n return false;\n}\n\nwindow.switchRegistryModalHandler = () => {\n document.getElementById('switchRegistryPersonGUID').value = getFromRegistry(\"personGuid\");\n document.getElementById('switchRegistryURL').innerHTML = getFromRegistry(\"registryServer\");\n document.getElementById('switchRegistryResponse').innerHTML = '';\n $('#switchRegistryModal').modal('show');\n};\n\nwindow.notifyForSwitchRegistry = () => {\n // it's just old code, with minimal changes\n const newPersonGuid = document.getElementById('switchRegistryPersonGUID').value;\n\n if (newPersonGuid !== '' && newPersonGuid.length === 36) {\n\n $.ajax({\n url: getFromRegistry(\"registryServer\") + '/api/v1/registry?action=switch&machine='\n + getFromRegistry(\"machineGuid\") + '&name='\n + encodeURIComponent(getFromRegistry(\"hostname\")) + '&url='\n + encodeURIComponent(serverDefault) + '&to=' + newPersonGuid,\n async: true,\n cache: false,\n headers: {\n 'Cache-Control': 'no-cache, no-store',\n 'Pragma': 'no-cache'\n },\n xhrFields: {withCredentials: true} // required for the cookie\n })\n .done(function (data) {\n data = NETDATA.xss.checkAlways('/api/v1/registry?action=switch', data);\n\n if (typeof data.status !== 'string' || data.status !== 'ok') {\n // NETDATA.error(413, NETDATA.registry.server + ' responded with: ' + JSON.stringify(data));\n console.warn(\"Netdata registry server send invalid response to SWITCH\", data)\n data = null;\n }\n\n $('#switchRegistryModal').modal('hide');\n })\n .fail(function () {\n // NETDATA.error(414, NETDATA.registry.server);\n console.warn(\"Netdata registry SWITCH failed\")\n document.getElementById('switchRegistryResponse').innerHTML = \"<b>Sorry! The registry rejected your request.</b>\";\n });\n } else {\n document.getElementById('switchRegistryResponse').innerHTML = \"<b>The ID you have entered is not a GUID.</b>\";\n }\n};\n\nvar deleteRegistryGuid = null;\nvar deleteRegistryUrl = null;\n\nwindow.deleteRegistryModalHandler = (guid, name, url) => {\n deleteRegistryGuid = guid;\n deleteRegistryUrl = url;\n\n document.getElementById('deleteRegistryServerName').innerHTML = name;\n document.getElementById('deleteRegistryServerName2').innerHTML = name;\n document.getElementById('deleteRegistryServerURL').innerHTML = url;\n document.getElementById('deleteRegistryResponse').innerHTML = '';\n\n $('#deleteRegistryModal').modal('show');\n}\n\nwindow.notifyForDeleteRegistry = () => {\n const responseEl = document.getElementById('deleteRegistryResponse');\n\n if (deleteRegistryUrl) {\n NETDATA.registryDelete(getFromRegistry, serverDefault, deleteRegistryUrl, function (result) {\n if (result !== null) {\n deleteRegistryUrl = null;\n $('#deleteRegistryModal').modal('hide');\n reduxStore.dispatch(resetRegistry())\n } else {\n responseEl.innerHTML = \"<b>Sorry, this command was rejected by the registry server!</b>\";\n }\n });\n }\n}\n\nvar options = {\n menus: {},\n submenu_names: {},\n data: null,\n hostname: 'netdata_server', // will be overwritten by the netdata server\n version: 'unknown',\n release_channel: 'unknown',\n hosts: [],\n\n duration: 0, // the default duration of the charts\n update_every: 1,\n\n chartsPerRow: 0,\n // chartsMinWidth: 1450,\n chartsHeight: 180,\n};\n\nfunction chartsPerRow(total) {\n void (total);\n\n if (options.chartsPerRow === 0) {\n return 1;\n //var width = Math.floor(total / options.chartsMinWidth);\n //if(width === 0) width = 1;\n //return width;\n } else {\n return options.chartsPerRow;\n }\n}\n\nfunction prioritySort(a, b) {\n if (a.priority < b.priority) {\n return -1;\n }\n if (a.priority > b.priority) {\n return 1;\n }\n return naturalSortCompare(a.name, b.name);\n}\n\nfunction sortObjectByPriority(object) {\n var idx = {};\n var sorted = [];\n\n for (var i in object) {\n if (!object.hasOwnProperty(i)) {\n continue;\n }\n\n if (typeof idx[i] === 'undefined') {\n idx[i] = object[i];\n sorted.push(i);\n }\n }\n\n sorted.sort(function (a, b) {\n if (idx[a].priority < idx[b].priority) {\n return -1;\n }\n if (idx[a].priority > idx[b].priority) {\n return 1;\n }\n return naturalSortCompare(a, b);\n });\n\n return sorted;\n}\n\n// ----------------------------------------------------------------------------\n// scroll to a section, without changing the browser history\n\nwindow.scrollToId = (hash) => {\n if (hash && hash !== '' && document.getElementById(hash) !== null) {\n var offset = $('#' + hash).offset();\n if (typeof offset !== 'undefined') {\n //console.log('scrolling to ' + hash + ' at ' + offset.top.toString());\n $('html, body').animate({ scrollTop: offset.top - 30 }, 0);\n }\n }\n\n // we must return false to prevent the default action\n return false;\n}\n\n// ----------------------------------------------------------------------------\n\n// user editable information\nwindow.customDashboard = {\n menu: {},\n submenu: {},\n context: {}\n};\n\n// netdata standard information\nconst netdataDashboard = {\n sparklines_registry: {},\n os: 'unknown',\n\n menu: {},\n submenu: {},\n context: {},\n\n // generate a sparkline\n // used in the documentation\n sparkline: function (prefix, chart, dimension, units, suffix) {\n if (options.data === null || typeof options.data.charts === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart] === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart].dimensions === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart].dimensions[dimension] === 'undefined') {\n return '';\n }\n\n var key = chart + '.' + dimension;\n\n if (typeof units === 'undefined') {\n units = '';\n }\n\n if (typeof this.sparklines_registry[key] === 'undefined') {\n this.sparklines_registry[key] = { count: 1 };\n } else {\n this.sparklines_registry[key].count++;\n }\n\n key = key + '.' + this.sparklines_registry[key].count;\n\n return prefix + '<div class=\"netdata-container\" data-netdata=\"' + chart + '\" data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\" data-dygraph-theme=\"sparkline\" data-dimensions=\"' + dimension + '\" data-show-value-of-' + dimension + '-at=\"' + key + '\"></div> (<span id=\"' + key + '\" style=\"display: inline-block; min-width: 50px; text-align: right;\">X</span>' + units + ')' + suffix;\n },\n\n gaugeChart: function (title, width, dimensions, colors) {\n if (typeof colors === 'undefined') {\n colors = '';\n }\n\n if (typeof dimensions === 'undefined') {\n dimensions = '';\n }\n\n return '<div class=\"netdata-container\" data-netdata=\"CHART_UNIQUE_ID\"'\n + ' data-dimensions=\"' + dimensions + '\"'\n + ' data-chart-library=\"gauge\"'\n + ' data-gauge-adjust=\"width\"'\n + ' data-title=\"' + title + '\"'\n + ' data-width=\"' + width + '\"'\n + ' data-points=\"CHART_DURATION\"'\n + ' data-colors=\"' + colors + '\"'\n + ' role=\"application\"></div>';\n },\n\n anyAttribute: function (obj, attr, key, def) {\n if (typeof (obj[key]) !== 'undefined') {\n var x = obj[key][attr];\n\n if (typeof (x) === 'undefined') {\n return def;\n }\n\n if (typeof (x) === 'function') {\n return x(netdataDashboard.os);\n }\n\n return x;\n }\n\n return def;\n },\n\n menuTitle: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return (this.anyAttribute(this.menu, 'title', chart.menu_pattern, chart.menu_pattern).toString()\n + '&nbsp;' + chart.type.slice(-(chart.type.length - chart.menu_pattern.length - 1)).toString()).replace(/_/g, ' ');\n }\n\n return (this.anyAttribute(this.menu, 'title', chart.menu, chart.menu)).toString().replace(/_/g, ' ');\n },\n\n menuIcon: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'icon', chart.menu_pattern, '<i class=\"fas fa-puzzle-piece\"></i>').toString();\n }\n\n return this.anyAttribute(this.menu, 'icon', chart.menu, '<i class=\"fas fa-puzzle-piece\"></i>');\n },\n\n menuInfo: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'info', chart.menu_pattern, null);\n }\n\n return this.anyAttribute(this.menu, 'info', chart.menu, null);\n },\n\n menuHeight: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'height', chart.menu_pattern, 1.0);\n }\n\n return this.anyAttribute(this.menu, 'height', chart.menu, 1.0);\n },\n\n submenuTitle: function (menu, submenu) {\n var key = menu + '.' + submenu;\n // console.log(key);\n var title = this.anyAttribute(this.submenu, 'title', key, submenu).toString().replace(/_/g, ' ');\n if (title.length > 28) {\n var a = title.substring(0, 13);\n var b = title.substring(title.length - 12, title.length);\n return a + '...' + b;\n }\n return title;\n },\n\n submenuInfo: function (menu, submenu) {\n var key = menu + '.' + submenu;\n return this.anyAttribute(this.submenu, 'info', key, null);\n },\n\n submenuHeight: function (menu, submenu, relative) {\n var key = menu + '.' + submenu;\n return this.anyAttribute(this.submenu, 'height', key, 1.0) * relative;\n },\n\n contextInfo: function (id) {\n var x = this.anyAttribute(this.context, 'info', id, null);\n\n if (x !== null) {\n return '<div class=\"shorten dashboard-context-info netdata-chart-alignment\" role=\"document\">' + x + '</div>';\n } else {\n return '';\n }\n },\n\n contextValueRange: function (id) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].valueRange !== 'undefined') {\n return this.context[id].valueRange;\n } else {\n return '[null, null]';\n }\n },\n\n contextHeight: function (id, def) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].height !== 'undefined') {\n return def * this.context[id].height;\n } else {\n return def;\n }\n },\n\n contextDecimalDigits: function (id, def) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].decimalDigits !== 'undefined') {\n return this.context[id].decimalDigits;\n } else {\n return def;\n }\n }\n};\nwindow.netdataDashboard = netdataDashboard // share with dashboard_info.js :/\n\n// ----------------------------------------------------------------------------\n\n// enrich the data structure returned by netdata\n// to reflect our menu system and content\n// TODO: this is a shame - we should fix charts naming (issue #807)\nfunction enrichChartData(chart) {\n var parts = chart.type.split('_');\n var tmp = parts[0];\n\n switch (tmp) {\n case 'ap':\n case 'net':\n case 'disk':\n case 'powersupply':\n case 'statsd':\n chart.menu = tmp;\n break;\n\n case 'apache':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'cache') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'bind':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'rndc') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'cgroup':\n chart.menu = chart.type;\n if (chart.id.match(/.*[\\._\\/-:]qemu[\\._\\/-:]*/) || chart.id.match(/.*[\\._\\/-:]kvm[\\._\\/-:]*/)) {\n chart.menu_pattern = 'cgqemu';\n } else {\n chart.menu_pattern = 'cgroup';\n }\n break;\n\n case 'go':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'expvar') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'mount':\n if (parts.length > 2) {\n chart.menu = tmp + '_' + parts[1];\n }\n else {\n chart.menu = tmp;\n }\n break;\n\n case 'isc':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'dhcpd') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'ovpn':\n chart.menu = chart.type;\n if (parts.length > 3 && parts[1] === 'status' && parts[2] === 'log') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'smartd':\n case 'web':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'log') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'anomaly':\n if (parts.length >= 2 && parts[1].startsWith('detection')) {\n chart.menu = tmp + '_detection';\n }\n break;\n\n case 'tc':\n chart.menu = tmp;\n\n // find a name for this device from fireqos info\n // we strip '_(in|out)' or '(in|out)_'\n if (chart.context === 'tc.qos' && (typeof options.submenu_names[chart.family] === 'undefined' || options.submenu_names[chart.family] === chart.family)) {\n var n = chart.name.split('.')[1];\n if (n.endsWith('_in')) {\n options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_in'));\n } else if (n.endsWith('_out')) {\n options.submenu_names[chart.family] = n.slice(0, n.lastIndexOf('_out'));\n } else if (n.startsWith('in_')) {\n options.submenu_names[chart.family] = n.slice(3, n.length);\n } else if (n.startsWith('out_')) {\n options.submenu_names[chart.family] = n.slice(4, n.length);\n } else {\n options.submenu_names[chart.family] = n;\n }\n }\n\n // increase the priority of IFB devices\n // to have inbound appear before outbound\n if (chart.id.match(/.*-ifb$/)) {\n chart.priority--;\n }\n\n break;\n\n default:\n chart.menu = chart.type;\n if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n }\n\n chart.submenu = chart.family;\n}\n\n// ----------------------------------------------------------------------------\n\nfunction headMain(os, charts, duration) {\n void (os);\n\n if (urlOptions.mode === 'print') {\n return '';\n }\n\n var head = '';\n\n if (typeof charts['system.swap'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.swap\"'\n + ' data-dimensions=\"used\"'\n + ' data-append-options=\"percentage\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Used Swap\"'\n + ' data-units=\"%\"'\n + ' data-easypiechart-max-value=\"100\"'\n + ' data-width=\"9%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-colors=\"#DD4400\"'\n + ' role=\"application\"></div>';\n }\n\n if (typeof charts['system.io'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.io\"'\n + ' data-dimensions=\"in\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Disk Read\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.io.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.io\"'\n + ' data-dimensions=\"out\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Disk Write\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.io.mainhead\"'\n + ' role=\"application\"></div>';\n }\n else if (typeof charts['system.pgpgio'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.pgpgio\"'\n + ' data-dimensions=\"in\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Disk Read\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.pgpgio.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.pgpgio\"'\n + ' data-dimensions=\"out\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Disk Write\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.pgpgio.mainhead\"'\n + ' role=\"application\"></div>';\n }\n\n if (typeof charts['system.cpu'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.cpu\"'\n + ' data-chart-library=\"gauge\"'\n + ' data-title=\"CPU\"'\n + ' data-units=\"%\"'\n + ' data-gauge-max-value=\"100\"'\n + ' data-width=\"20%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-colors=\"' + NETDATA.colors[12] + '\"'\n + ' role=\"application\"></div>';\n }\n\n if (typeof charts['system.net'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.net\"'\n + ' data-dimensions=\"received\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Net Inbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.net.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.net\"'\n + ' data-dimensions=\"sent\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Net Outbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.net.mainhead\"'\n + ' role=\"application\"></div>';\n }\n else if (typeof charts['system.ip'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ip\"'\n + ' data-dimensions=\"received\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IP Inbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ip.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ip\"'\n + ' data-dimensions=\"sent\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IP Outbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ip.mainhead\"'\n + ' role=\"application\"></div>';\n }\n else if (typeof charts['system.ipv4'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv4\"'\n + ' data-dimensions=\"received\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IPv4 Inbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ipv4.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv4\"'\n + ' data-dimensions=\"sent\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IPv4 Outbound\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ipv4.mainhead\"'\n + ' role=\"application\"></div>';\n }\n else if (typeof charts['system.ipv6'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv6\"'\n + ' data-dimensions=\"received\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IPv6 Inbound\"'\n + ' data-units=\"kbps\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ipv6.mainhead\"'\n + ' role=\"application\"></div>';\n\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ipv6\"'\n + ' data-dimensions=\"sent\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"IPv6 Outbound\"'\n + ' data-units=\"kbps\"'\n + ' data-width=\"11%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-common-units=\"system.ipv6.mainhead\"'\n + ' role=\"application\"></div>';\n }\n\n if (typeof charts['system.ram'] !== 'undefined') {\n head += '<div class=\"netdata-container\" style=\"margin-right: 10px;\" data-netdata=\"system.ram\"'\n + ' data-dimensions=\"used|buffers|active|wired\"' // active and wired are FreeBSD stats\n + ' data-append-options=\"percentage\"'\n + ' data-chart-library=\"easypiechart\"'\n + ' data-title=\"Used RAM\"'\n + ' data-units=\"%\"'\n + ' data-easypiechart-max-value=\"100\"'\n + ' data-width=\"9%\"'\n + ' data-points=\"' + duration.toString() + '\"'\n + ' data-colors=\"' + NETDATA.colors[7] + '\"'\n + ' role=\"application\"></div>';\n }\n\n return head;\n}\n\nfunction generateHeadCharts(type, chart, duration) {\n if (urlOptions.mode === 'print') {\n return '';\n }\n\n var head = '';\n var hcharts = netdataDashboard.anyAttribute(netdataDashboard.context, type, chart.context, []);\n if (hcharts.length > 0) {\n var hi = 0, hlen = hcharts.length;\n while (hi < hlen) {\n if (typeof hcharts[hi] === 'function') {\n head += hcharts[hi](netdataDashboard.os, chart.id).replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id);\n } else {\n head += hcharts[hi].replace(/CHART_DURATION/g, duration.toString()).replace(/CHART_UNIQUE_ID/g, chart.id);\n }\n hi++;\n }\n }\n return head;\n}\n\nfunction renderPage(menus, data) {\n var div = document.getElementById('charts_div');\n var pcent_width = Math.floor(100 / chartsPerRow($(div).width()));\n\n // find the proper duration for per-second updates\n var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60;\n options.duration = duration; // probably obsolete/not needed\n options.update_every = data.update_every;\n\n var html = '';\n var sidebar = '<ul class=\"nav dashboard-sidenav\" data-spy=\"affix\" id=\"sidebar_ul\">';\n var mainhead = headMain(netdataDashboard.os, data.charts, duration);\n\n // sort the menus\n var main = sortObjectByPriority(menus);\n var i = 0, len = main.length;\n\n // todo hook to options\n const hasChartsOnBottom = defaultAttributes.legendPosition === \"bottom\"\n const chartAdditionalHeight = hasChartsOnBottom ? LEGEND_BOTTOM_SINGLE_LINE_HEIGHT : 0\n while (i < len) {\n var menu = main[i++];\n\n // generate an entry at the main menu\n\n var menuid = NETDATA.name2id('menu_' + menu);\n sidebar += '<li class=\"\"><a href=\"#' + menuid + '\" onClick=\"return scrollToId(\\'' + menuid + '\\');\">' + menus[menu].icon + ' ' + menus[menu].title + '</a><ul class=\"nav\">';\n html += '<div role=\"section\" class=\"dashboard-section\"><div role=\"sectionhead\"><h1 id=\"' + menuid + '\" role=\"heading\">' + menus[menu].icon + ' ' + menus[menu].title + '</h1></div><div role=\"section\" class=\"dashboard-subsection\">';\n\n if (menus[menu].info !== null) {\n html += menus[menu].info;\n }\n\n // console.log(' >> ' + menu + ' (' + menus[menu].priority + '): ' + menus[menu].title);\n\n var shtml = '';\n var mhead = '<div class=\"netdata-chart-row\">' + mainhead;\n mainhead = '';\n\n // sort the submenus of this menu\n var sub = sortObjectByPriority(menus[menu].submenus);\n var si = 0, slen = sub.length;\n while (si < slen) {\n var submenu = sub[si++];\n\n // generate an entry at the submenu\n var submenuid = NETDATA.name2id('menu_' + menu + '_submenu_' + submenu);\n sidebar += '<li class><a href=\"#' + submenuid + '\" onClick=\"return scrollToId(\\'' + submenuid + '\\');\">' + menus[menu].submenus[submenu].title + '</a></li>';\n shtml += '<div role=\"section\" class=\"dashboard-section-container\" id=\"' + submenuid + '\"><h2 id=\"' + submenuid + '\" class=\"netdata-chart-alignment\" role=\"heading\">' + menus[menu].submenus[submenu].title + '</h2>';\n\n if (menus[menu].submenus[submenu].info !== null) {\n shtml += '<div class=\"dashboard-submenu-info netdata-chart-alignment\" role=\"document\">' + menus[menu].submenus[submenu].info + '</div>';\n }\n\n var head = '<div class=\"netdata-chart-row\">';\n var chtml = '';\n\n // console.log(' \\------- ' + submenu + ' (' + menus[menu].submenus[submenu].priority + '): ' + menus[menu].submenus[submenu].title);\n\n // sort the charts in this submenu of this menu\n menus[menu].submenus[submenu].charts.sort(prioritySort);\n var ci = 0, clen = menus[menu].submenus[submenu].charts.length;\n while (ci < clen) {\n var chart = menus[menu].submenus[submenu].charts[ci++];\n\n // generate the submenu heading charts\n mhead += generateHeadCharts('mainheads', chart, duration);\n head += generateHeadCharts('heads', chart, duration);\n\n function chartCommonMin(family, context, units) {\n var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMin', context, undefined);\n if (typeof x !== 'undefined') {\n return ' data-common-min=\"' + family + '/' + context + '/' + units + '\"';\n } else {\n return '';\n }\n }\n\n function chartCommonMax(family, context, units) {\n var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMax', context, undefined);\n if (typeof x !== 'undefined') {\n return ' data-common-max=\"' + family + '/' + context + '/' + units + '\"';\n } else {\n return '';\n }\n }\n\n // generate the chart\n if (urlOptions.mode === 'print') {\n chtml += '<div role=\"row\" class=\"dashboard-print-row\">';\n }\n\n const chartHeight = netdataDashboard.contextHeight(chart.context, options.chartsHeight)\n + chartAdditionalHeight;\n\n chtml += '<div class=\"netdata-chartblock-container\" style=\"width: ' + pcent_width.toString() + '%;\">' + netdataDashboard.contextInfo(chart.context) + '<div class=\"netdata-container\" id=\"chart_' + NETDATA.name2id(chart.id) + '\" data-netdata=\"' + chart.id + '\"'\n + ' data-width=\"100%\"'\n + ' data-height=\"' + chartHeight.toString() + 'px\"'\n + ' data-dygraph-valuerange=\"' + netdataDashboard.contextValueRange(chart.context) + '\"'\n + ' data-id=\"' + NETDATA.name2id(options.hostname + '/' + chart.id) + '\"'\n + ' data-colors=\"' + netdataDashboard.anyAttribute(netdataDashboard.context, 'colors', chart.context, '') + '\"'\n + ' data-decimal-digits=\"' + netdataDashboard.contextDecimalDigits(chart.context, -1) + '\"'\n + (hasChartsOnBottom ? ' data-legend-position=\"bottom\"' : '')\n + chartCommonMin(chart.family, chart.context, chart.units)\n + chartCommonMax(chart.family, chart.context, chart.units)\n + ' role=\"application\"></div></div>';\n\n if (urlOptions.mode === 'print') {\n chtml += '</div>';\n }\n }\n\n head += '</div>';\n shtml += head + chtml + '</div>';\n }\n\n mhead += '</div>';\n sidebar += '</ul></li>';\n html += mhead + shtml + '</div></div><hr role=\"separator\"/>';\n }\n\n const isMemoryModeDbEngine = data.memory_mode === \"dbengine\";\n\n sidebar += '<li class=\"\" style=\"padding-top:15px;\"><a href=\"https://learn.netdata.cloud/docs/agent/collectors/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more charts</a></li>';\n sidebar += '<li class=\"\"><a href=\"https://learn.netdata.cloud/docs/agent/health/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more alarms</a></li>';\n sidebar += '<li class=\"\" style=\"margin:20px;color:#666;\"><small>Every ' +\n ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ', ' +\n 'Netdata collects <strong>' + data.dimensions_count.toLocaleString() + '</strong> metrics on ' +\n data.hostname.toString() + ', presents them in <strong>' +\n data.charts_count.toLocaleString() + '</strong> charts' +\n (isMemoryModeDbEngine ? '' : ',') + // oxford comma\n ' and monitors them with <strong>' +\n data.alarms_count.toLocaleString() + '</strong> alarms.';\n\n if (!isMemoryModeDbEngine) {\n sidebar += '<br />&nbsp;<br />Get more history by ' +\n '<a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage#using-the-round-robin-database\" target=_blank>configuring Netdata\\'s <strong>history</strong></a> or switching to the <a href=\"https://learn.netdata.cloud/docs/agent/database/engine\" target=_blank>database engine.</a>';\n }\n\n sidebar += '<br/>&nbsp;<br/><strong>netdata</strong><br/>' + data.version.toString() + '</small>';\n\n sidebar += '</li>'\n\n sidebar += '<li id=\"sidebar-end-portal-container\"></li>'\n\n\n sidebar += '</ul>';\n div.innerHTML = html;\n document.getElementById('sidebar').innerHTML = sidebar;\n\n if (urlOptions.highlight === true) {\n reduxStore.dispatch(setGlobalChartUnderlayAction({\n after: urlOptions.highlight_after,\n before: urlOptions.highlight_before,\n }))\n }\n\n if (urlOptions.mode === 'print') {\n printPage();\n } else {\n finalizePage();\n }\n}\n\nfunction renderChartsAndMenu(data) {\n options.menus = {};\n options.submenu_names = {};\n\n var menus = options.menus;\n var charts = data.charts;\n var m, menu_key;\n\n for (var c in charts) {\n if (!charts.hasOwnProperty(c)) {\n continue;\n }\n\n var chart = charts[c];\n enrichChartData(chart);\n m = chart.menu;\n\n // create the menu\n if (typeof menus[m] === 'undefined') {\n menus[m] = {\n menu_pattern: chart.menu_pattern,\n priority: chart.priority,\n submenus: {},\n title: netdataDashboard.menuTitle(chart),\n icon: netdataDashboard.menuIcon(chart),\n info: netdataDashboard.menuInfo(chart),\n height: netdataDashboard.menuHeight(chart) * options.chartsHeight\n };\n } else {\n if (typeof (menus[m].menu_pattern) === 'undefined') {\n menus[m].menu_pattern = chart.menu_pattern;\n }\n\n if (chart.priority < menus[m].priority) {\n menus[m].priority = chart.priority;\n }\n }\n\n menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n\n // create the submenu\n if (typeof menus[m].submenus[chart.submenu] === 'undefined') {\n menus[m].submenus[chart.submenu] = {\n priority: chart.priority,\n charts: [],\n title: null,\n info: netdataDashboard.submenuInfo(menu_key, chart.submenu),\n height: netdataDashboard.submenuHeight(menu_key, chart.submenu, menus[m].height)\n };\n } else {\n if (chart.priority < menus[m].submenus[chart.submenu].priority) {\n menus[m].submenus[chart.submenu].priority = chart.priority;\n }\n }\n\n // index the chart in the menu/submenu\n menus[m].submenus[chart.submenu].charts.push(chart);\n }\n\n // propagate the descriptive subname given to QoS\n // to all the other submenus with the same name\n for (var m in menus) {\n if (!menus.hasOwnProperty(m)) {\n continue;\n }\n\n for (var s in menus[m].submenus) {\n if (!menus[m].submenus.hasOwnProperty(s)) {\n continue;\n }\n\n // set the family using a name\n if (typeof options.submenu_names[s] !== 'undefined') {\n menus[m].submenus[s].title = s + ' (' + options.submenu_names[s] + ')';\n } else {\n menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n menus[m].submenus[s].title = netdataDashboard.submenuTitle(menu_key, s);\n }\n }\n }\n\n renderPage(menus, data);\n}\n\n// ----------------------------------------------------------------------------\n\nexport const handleLoadJs = (promise, library, callback) => promise\n .catch((e) => {\n console.warn('error', e);\n alert(`Cannot load required JS library: ${library}`)\n })\n .then(() => {\n callback()\n })\n\n\nfunction loadClipboard(callback) {\n handleLoadJs(\n import(\"clipboard-polyfill\").then((clipboard) => {\n window.clipboard = clipboard\n }),\n \"clipboard-polyfill\",\n callback,\n )\n}\n\nfunction loadBootstrapTable(callback) {\n handleLoadJs(\n Promise.all([\n import(\"bootstrap-table\").then(() => (\n import('bootstrap-table/dist/extensions/export/bootstrap-table-export.min')\n )),\n import(\"tableexport.jquery.plugin\")\n ]),\n \"bootstrap-table\",\n callback,\n )\n}\n\nfunction loadBootstrapSlider(callback) {\n handleLoadJs(\n Promise.all([\n import(\"bootstrap-slider\").then(({ default: slider }) => {\n window.Slider = slider\n }),\n import(\"bootstrap-slider/dist/css/bootstrap-slider.min.css\"),\n ]),\n \"bootstrap-slider\",\n callback,\n )\n}\n\nfunction loadLzString(callback) {\n handleLoadJs(import(\"lz-string\"), \"lz-string\", callback)\n}\n\nfunction loadPako(callback) {\n handleLoadJs(\n import(\"pako\").then(({ default: pako }) => {\n window.pako = pako\n }),\n \"pako\",\n callback,\n )\n}\n\n// ----------------------------------------------------------------------------\n\nwindow.clipboardCopy = text => {\n clipboard.writeText(text);\n};\n\nwindow.clipboardCopyBadgeEmbed = url => {\n clipboard.writeText('<embed src=\"' + url + '\" type=\"image/svg+xml\" height=\"20\"/>');\n};\n\n// ----------------------------------------------------------------------------\n\nfunction alarmsUpdateModal() {\n var active = '<h3>Raised Alarms</h3><table class=\"table\">';\n var all = '<h3>All Running Alarms</h3><div class=\"panel-group\" id=\"alarms_all_accordion\" role=\"tablist\" aria-multiselectable=\"true\">';\n var footer = '<hr/><a href=\"https://github.com/netdata/netdata/tree/master/web/api/badges#netdata-badges\" target=\"_blank\">netdata badges</a> refresh automatically. Their color indicates the state of the alarm: <span style=\"color: #e05d44\"><b>&nbsp;red&nbsp;</b></span> is critical, <span style=\"color:#fe7d37\"><b>&nbsp;orange&nbsp;</b></span> is warning, <span style=\"color: #4c1\"><b>&nbsp;bright green&nbsp;</b></span> is ok, <span style=\"color: #9f9f9f\"><b>&nbsp;light grey&nbsp;</b></span> is undefined (i.e. no data or no status), <span style=\"color: #000\"><b>&nbsp;black&nbsp;</b></span> is not initialized. You can copy and paste their URLs to embed them in any web page.<br/>netdata can send notifications for these alarms. Check <a href=\"https://github.com/netdata/netdata/blob/master/health/notifications/health_alarm_notify.conf\" target=\"_blank\">this configuration file</a> for more information.';\n\n loadClipboard(function () {\n });\n\n\n const callback = (data) => {\n options.alarm_families = [];\n\n if (data === null) {\n document.getElementById('alarms_active').innerHTML =\n document.getElementById('alarms_all').innerHTML =\n document.getElementById('alarms_log').innerHTML =\n 'failed to load alarm data!';\n return;\n }\n\n function alarmid4human(id) {\n if (id === 0) {\n return '-';\n }\n\n return id.toString();\n }\n\n function timestamp4human(timestamp, space) {\n if (timestamp === 0) {\n return '-';\n }\n\n if (typeof space === 'undefined') {\n space = '&nbsp;';\n }\n\n var t = new Date(timestamp * 1000);\n\n // commented out to always have date+time, to have consistent exports\n // var now = new Date();\n\n // if (t.toDateString() === now.toDateString()) {\n // return t.toLocaleTimeString();\n // }\n\n return t.toLocaleDateString() + space + t.toLocaleTimeString();\n }\n\n function alarm_lookup_explain(alarm, chart) {\n var dimensions = ' of all values ';\n\n if (chart.dimensions.length > 1) {\n dimensions = ' of the sum of all dimensions ';\n }\n\n if (typeof alarm.lookup_dimensions !== 'undefined') {\n var d = alarm.lookup_dimensions.replace(/|/g, ',');\n var x = d.split(',');\n if (x.length > 1) {\n dimensions = 'of the sum of dimensions <code>' + alarm.lookup_dimensions + '</code> ';\n } else {\n dimensions = 'of all values of dimension <code>' + alarm.lookup_dimensions + '</code> ';\n }\n }\n\n return '<code>' + alarm.lookup_method + '</code> '\n + dimensions + ', of chart <code>' + alarm.chart + '</code>'\n + ', starting <code>' + seconds4human(alarm.lookup_after + alarm.lookup_before, { space: '&nbsp;' }) + '</code> and up to <code>' + seconds4human(alarm.lookup_before, { space: '&nbsp;' }) + '</code>'\n + ((alarm.lookup_options) ? (', with options <code>' + alarm.lookup_options.replace(/ /g, ',&nbsp;') + '</code>') : '')\n + '.';\n }\n\n function alarm_to_html(alarm, full) {\n var chart = options.data.charts[alarm.chart];\n if (typeof (chart) === 'undefined') {\n chart = options.data.charts_by_name[alarm.chart];\n if (typeof (chart) === 'undefined') {\n // this means the charts loaded are incomplete\n // probably netdata was restarted and more alarms\n // are now available.\n console.log('Cannot find chart ' + alarm.chart + ', you probably need to refresh the page.');\n return '';\n }\n }\n\n var has_alarm = (typeof alarm.warn !== 'undefined' || typeof alarm.crit !== 'undefined');\n var badge_url = `${serverDefault}/api/v1/badge.svg?chart=${alarm.chart}&alarm=${alarm.name}&refresh=auto`;\n\n var action_buttons = '<br/>&nbsp;<br/>role: <b>' + alarm.recipient + '</b><br/>&nbsp;<br/>'\n + '<div class=\"action-button ripple\" title=\"click to scroll the dashboard to the chart of this alarm\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"scrollToChartAfterHidingModal(\\'' + alarm.chart + '\\', ' + alarm.last_status_change * 1000 + ', \\'' + alarm.status + '\\'); $(\\'#alarmsModal\\').modal(\\'hide\\'); return false;\"><i class=\"fab fa-periscope\"></i></div>'\n + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard the URL of this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopy(\\'' + badge_url + '\\'); return false;\"><i class=\"far fa-copy\"></i></div>'\n + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard an auto-refreshing <code>embed</code> html element for this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopyBadgeEmbed(\\'' + badge_url + '\\'); return false;\"><i class=\"fas fa-copy\"></i></div>';\n\n var html = '<tr><td class=\"text-center\" style=\"vertical-align: middle; word-break: break-word;\" width=\"40%\"><b>' + alarm.chart + '</b><br/>&nbsp;<br/><embed src=\"' + badge_url + '\" type=\"image/svg+xml\" height=\"20\"/><br/>&nbsp;<br/><span style=\"font-size: 18px;\">' + alarm.info + '</span>' + action_buttons + '</td>'\n + '<td><table class=\"table\">'\n + ((typeof alarm.warn !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">warning&nbsp;when</td><td><span style=\"font-family: monospace; color:#fe7d37; font-weight: bold;\">' + alarm.warn + '</span></td></tr>') : '')\n + ((typeof alarm.crit !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">critical&nbsp;when</td><td><span style=\"font-family: monospace; color: #e05d44; font-weight: bold;\">' + alarm.crit + '</span></td></tr>') : '');\n\n if (full === true) {\n var units = chart.units;\n if (units === '%') {\n units = '&#37;';\n }\n\n html += ((typeof alarm.lookup_after !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">db&nbsp;lookup</td><td>' + alarm_lookup_explain(alarm, chart) + '</td></tr>') : '')\n + ((typeof alarm.calc !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">calculation</td><td><span style=\"font-family: monospace;\">' + alarm.calc + '</span></td></tr>') : '')\n + ((chart.green !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">green&nbsp;threshold</td><td><code>' + chart.green + ' ' + units + '</code></td></tr>') : '')\n + ((chart.red !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">red&nbsp;threshold</td><td><code>' + chart.red + ' ' + units + '</code></td></tr>') : '');\n }\n\n if (alarm.warn_repeat_every > 0) {\n html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;warning</td><td>' + seconds4human(alarm.warn_repeat_every) + '</td></tr>';\n }\n\n if (alarm.crit_repeat_every > 0) {\n html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;critical</td><td>' + seconds4human(alarm.crit_repeat_every) + '</td></tr>';\n }\n\n var delay = '';\n if ((alarm.delay_up_duration > 0 || alarm.delay_down_duration > 0) && alarm.delay_multiplier !== 0 && alarm.delay_max_duration > 0) {\n if (alarm.delay_up_duration === alarm.delay_down_duration) {\n delay += '<small><br/>hysteresis ' + seconds4human(alarm.delay_up_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n });\n } else {\n delay = '<small><br/>hysteresis ';\n if (alarm.delay_up_duration > 0) {\n delay += 'on&nbsp;escalation&nbsp;<code>' + seconds4human(alarm.delay_up_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>, ';\n }\n if (alarm.delay_down_duration > 0) {\n delay += 'on&nbsp;recovery&nbsp;<code>' + seconds4human(alarm.delay_down_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>, ';\n }\n }\n if (alarm.delay_multiplier !== 1.0) {\n delay += 'multiplied&nbsp;by&nbsp;<code>' + alarm.delay_multiplier.toString() + '</code>';\n delay += ',&nbsp;up&nbsp;to&nbsp;<code>' + seconds4human(alarm.delay_max_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>';\n }\n delay += '</small>';\n }\n\n html += '<tr><td width=\"10%\" style=\"text-align:right\">check&nbsp;every</td><td>' + seconds4human(alarm.update_every, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</td></tr>'\n + ((has_alarm === true) ? ('<tr><td width=\"10%\" style=\"text-align:right\">execute</td><td><span style=\"font-family: monospace;\">' + alarm.exec + '</span>' + delay + '</td></tr>') : '')\n + '<tr><td width=\"10%\" style=\"text-align:right\">source</td><td><span style=\"font-family: monospace; word-break: break-word;\">' + alarm.source + '</span></td></tr>'\n + '</table></td></tr>';\n\n return html;\n }\n\n function alarm_family_show(id) {\n var html = '<table class=\"table\">';\n var family = options.alarm_families[id];\n var len = family.arr.length;\n while (len--) {\n var alarm = family.arr[len];\n html += alarm_to_html(alarm, true);\n }\n html += '</table>';\n\n $('#alarm_all_' + id.toString()).html(html);\n enableTooltipsAndPopovers();\n }\n\n // find the proper family of each alarm\n var x, family, alarm;\n var count_active = 0;\n var count_all = 0;\n var families = {};\n var families_sort = [];\n for (x in data.alarms) {\n if (!data.alarms.hasOwnProperty(x)) {\n continue;\n }\n\n alarm = data.alarms[x];\n family = alarm.family;\n\n // find the chart\n var chart = options.data.charts[alarm.chart];\n if (typeof chart === 'undefined') {\n chart = options.data.charts_by_name[alarm.chart];\n }\n\n // not found - this should never happen!\n if (typeof chart === 'undefined') {\n console.log('WARNING: alarm ' + x + ' is linked to chart ' + alarm.chart + ', which is not found in the list of chart got from the server.');\n chart = { priority: 9999999 };\n }\n else if (typeof chart.menu !== 'undefined' && typeof chart.submenu !== 'undefined')\n // the family based on the chart\n {\n family = chart.menu + ' - ' + chart.submenu;\n }\n\n if (typeof families[family] === 'undefined') {\n families[family] = {\n name: family,\n arr: [],\n priority: chart.priority\n };\n\n families_sort.push(families[family]);\n }\n\n if (chart.priority < families[family].priority) {\n families[family].priority = chart.priority;\n }\n\n families[family].arr.unshift(alarm);\n }\n\n // sort the families, like the dashboard menu does\n var families_sorted = families_sort.sort(function (a, b) {\n if (a.priority < b.priority) {\n return -1;\n }\n if (a.priority > b.priority) {\n return 1;\n }\n return naturalSortCompare(a.name, b.name);\n });\n\n var i = 0;\n var fc = 0;\n var len = families_sorted.length;\n while (len--) {\n family = families_sorted[i++].name;\n var active_family_added = false;\n\n var expanded = 'false';\n var collapsed = 'class=\"collapsed\"';\n var cin = '';\n\n // uncomment if first family needs to be expanded by default\n // var expanded = 'true';\n // var collapsed = '';\n // var cin = 'in';\n\n if (fc !== 0) {\n all += \"</table></div></div></div>\";\n\n // uncomment if first family needs to be expanded by default\n // expanded = 'false';\n // collapsed = 'class=\"collapsed\"';\n // cin = '';\n }\n\n all += '<div class=\"panel panel-default\"><div class=\"panel-heading\" role=\"tab\" id=\"alarm_all_heading_' + fc.toString() + '\"><h4 class=\"panel-title\"><a ' + collapsed + ' role=\"button\" data-toggle=\"collapse\" data-parent=\"#alarms_all_accordion\" href=\"#alarm_all_' + fc.toString() + '\" aria-expanded=\"' + expanded + '\" aria-controls=\"alarm_all_' + fc.toString() + '\">' + family.toString() + '</a></h4></div><div id=\"alarm_all_' + fc.toString() + '\" class=\"panel-collapse collapse ' + cin + '\" role=\"tabpanel\" aria-labelledby=\"alarm_all_heading_' + fc.toString() + '\" data-alarm-id=\"' + fc.toString() + '\"><div class=\"panel-body\" id=\"alarm_all_body_' + fc.toString() + '\">';\n\n options.alarm_families[fc] = families[family];\n\n fc++;\n\n var arr = families[family].arr;\n var c = arr.length;\n while (c--) {\n alarm = arr[c];\n if (alarm.status === 'WARNING' || alarm.status === 'CRITICAL') {\n if (!active_family_added) {\n active_family_added = true;\n active += '<tr><th class=\"text-center\" colspan=\"2\"><h4>' + family + '</h4></th></tr>';\n }\n count_active++;\n active += alarm_to_html(alarm, true);\n }\n\n count_all++;\n }\n }\n active += \"</table>\";\n if (families_sorted.length > 0) {\n all += \"</div></div></div>\";\n }\n all += \"</div>\";\n\n if (!count_active) {\n active += '<div style=\"width:100%; height: 100px; text-align: center;\"><span style=\"font-size: 50px;\"><i class=\"fas fa-thumbs-up\"></i></span><br/>Everything is normal. No raised alarms.</div>';\n } else {\n active += footer;\n }\n\n if (!count_all) {\n all += \"<h4>No alarms are running in this system.</h4>\";\n } else {\n all += footer;\n }\n\n document.getElementById('alarms_active').innerHTML = active;\n document.getElementById('alarms_all').innerHTML = all;\n enableTooltipsAndPopovers();\n\n if (families_sorted.length > 0) {\n alarm_family_show(0);\n }\n\n // register bootstrap events\n var $accordion = $('#alarms_all_accordion');\n $accordion.on('show.bs.collapse', function (d) {\n var target = $(d.target);\n var id = $(target).data('alarm-id');\n alarm_family_show(id);\n });\n $accordion.on('hidden.bs.collapse', function (d) {\n var target = $(d.target);\n var id = $(target).data('alarm-id');\n $('#alarm_all_' + id.toString()).html('');\n });\n\n document.getElementById('alarms_log').innerHTML = '<h3>Alarm Log</h3><table id=\"alarms_log_table\"></table>';\n\n loadBootstrapTable(function () {\n $('#alarms_log_table').bootstrapTable({\n url: `${serverDefault}/api/v1/alarm_log?all`,\n cache: false,\n pagination: true,\n pageSize: 10,\n showPaginationSwitch: false,\n search: true,\n searchTimeOut: 300,\n searchAlign: 'left',\n showColumns: true,\n showExport: true,\n exportDataType: 'all',\n exportOptions: {\n fileName: 'netdata_alarm_log'\n },\n onClickRow: function (row) {\n scrollToChartAfterHidingModal(row.chart, row.when * 1000, row.status);\n $('#alarmsModal').modal('hide');\n return false;\n },\n rowStyle: function (row) {\n switch (row.status) {\n case 'CRITICAL':\n return { classes: 'danger' };\n break;\n case 'WARNING':\n return { classes: 'warning' };\n break;\n case 'UNDEFINED':\n return { classes: 'info' };\n break;\n case 'CLEAR':\n return { classes: 'success' };\n break;\n }\n return {};\n },\n showFooter: false,\n showHeader: true,\n showRefresh: true,\n showToggle: false,\n sortable: true,\n silentSort: false,\n columns: [\n {\n field: 'when',\n title: 'Event Date',\n valign: 'middle',\n titleTooltip: 'The date and time the even took place',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n switchable: false,\n sortable: true\n },\n {\n field: 'hostname',\n title: 'Host',\n valign: 'middle',\n titleTooltip: 'The host that generated this event',\n align: 'center',\n visible: false,\n sortable: true\n },\n {\n field: 'unique_id',\n title: 'Unique ID',\n titleTooltip: 'The host unique ID for this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'alarm_id',\n title: 'Alarm ID',\n titleTooltip: 'The ID of the alarm that generated this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'alarm_event_id',\n title: 'Alarm Event ID',\n titleTooltip: 'The incremental ID of this event for the given alarm',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'chart',\n title: 'Chart',\n titleTooltip: 'The chart the alarm is attached to',\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'family',\n title: 'Family',\n titleTooltip: 'The family of the chart the alarm is attached to',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'name',\n title: 'Alarm',\n titleTooltip: 'The alarm name that generated this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return value.toString().replace(/_/g, ' ');\n },\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'value_string',\n title: 'Friendly Value',\n titleTooltip: 'The value of the alarm, that triggered this event',\n align: 'right',\n valign: 'middle',\n sortable: true\n },\n {\n field: 'old_value_string',\n title: 'Friendly Old Value',\n titleTooltip: 'The value of the alarm, just before this event',\n align: 'right',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'old_value',\n title: 'Old Value',\n titleTooltip: 'The value of the alarm, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'value',\n title: 'Value',\n titleTooltip: 'The value of the alarm, that triggered this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n },\n align: 'right',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'units',\n title: 'Units',\n titleTooltip: 'The units of the value of the alarm',\n align: 'left',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'old_status',\n title: 'Old Status',\n titleTooltip: 'The status of the alarm, just before this event',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'status',\n title: 'Status',\n titleTooltip: 'The status of the alarm, that was set due to this event',\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'duration',\n title: 'Last Duration',\n titleTooltip: 'The duration the alarm was at its previous state, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'non_clear_duration',\n title: 'Raised Duration',\n titleTooltip: 'The duration the alarm was raised, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'recipient',\n title: 'Recipient',\n titleTooltip: 'The recipient of this event',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'processed',\n title: 'Processed Status',\n titleTooltip: 'True when this event is processed',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === true) {\n return 'DONE';\n } else {\n return 'PENDING';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updated',\n title: 'Updated Status',\n titleTooltip: 'True when this event has been updated by another event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === true) {\n return 'UPDATED';\n } else {\n return 'CURRENT';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updated_by_id',\n title: 'Updated By ID',\n titleTooltip: 'The unique ID of the event that obsoleted this one',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updates_id',\n title: 'Updates ID',\n titleTooltip: 'The unique ID of the event obsoleted because of this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec',\n title: 'Script',\n titleTooltip: 'The script to handle the event notification',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec_run',\n title: 'Script Run At',\n titleTooltip: 'The date and time the script has been ran',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec_code',\n title: 'Script Return Value',\n titleTooltip: 'The return code of the script',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === 0) {\n return 'OK (returned 0)';\n } else {\n return 'FAILED (with code ' + value.toString() + ')';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'delay',\n title: 'Script Delay',\n titleTooltip: 'The hysteresis of the notification',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'delay_up_to_timestamp',\n title: 'Script Delay Run At',\n titleTooltip: 'The date and time the script should be run, after hysteresis',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'info',\n title: 'Description',\n titleTooltip: 'A short description of the alarm',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'source',\n title: 'Alarm Source',\n titleTooltip: 'The source of configuration of the alarm',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n }\n ]\n });\n // console.log($('#alarms_log_table').bootstrapTable('getOptions'));\n });\n }\n\n reduxStore.dispatch(fetchAllAlarmsAction.request({\n callback,\n serverDefault,\n }))\n}\n\nfunction initializeDynamicDashboardWithData(data) {\n if (data !== null) {\n options.hostname = data.hostname;\n options.data = data;\n options.version = data.version;\n options.release_channel = data.release_channel;\n options.timezone = data.timezone;\n netdataDashboard.os = data.os;\n\n if (typeof data.hosts !== 'undefined') {\n options.hosts = data.hosts;\n }\n\n // update the dashboard hostname\n document.getElementById('netdataVersion').innerHTML = options.version;\n\n // update the dashboard title\n document.title = options.hostname + ' netdata dashboard';\n\n // create a chart_by_name index\n data.charts_by_name = {};\n var charts = data.charts;\n var x;\n for (x in charts) {\n if (!charts.hasOwnProperty(x)) {\n continue;\n }\n\n var chart = charts[x];\n data.charts_by_name[chart.name] = chart;\n }\n\n // render all charts\n renderChartsAndMenu(data);\n }\n}\n\n// an object to keep initilization configuration\n// needed due to the async nature of the XSS modal\nvar initializeConfig = {\n url: null,\n custom_info: true,\n};\n\n// will be removed when we'll transform dashboard_info.js into DSL\n// memoize so it's fetched only once\nconst loadDashboardInfo = memoizeWith(identity, () => (\n $.ajax({\n url: `${serverDefault}dashboard_info.js`,\n cache: true,\n dataType: 'script',\n xhrFields: { withCredentials: true }, // required for the cookie\n })\n .fail(function () {\n alert(`Cannot load required JS library: dashboard_info.js`);\n })\n))\n\nfunction loadCustomDashboardInfo(url, callback) {\n $.ajax({\n url,\n cache: true,\n dataType: \"script\",\n xhrFields: { withCredentials: true } // required for the cookie\n })\n .fail(function () {\n alert(`Cannot load required JS library: ${url}`);\n })\n .always(function () {\n $.extend(true, netdataDashboard, customDashboard);\n callback();\n })\n}\n\nfunction initializeChartsAndCustomInfo() {\n loadDashboardInfo().then(() => {\n // download all the charts the server knows\n NETDATA.chartRegistry.downloadAll(initializeConfig.url, function (data) {\n if (data !== null) {\n reduxStore.dispatch(chartsMetadataRequestSuccess({ data }))\n if (initializeConfig.custom_info === true && typeof data.custom_info !== 'undefined' && data.custom_info !== \"\" && window.netdataSnapshotData === null) {\n //console.log('loading custom dashboard decorations from server ' + initializeConfig.url);\n loadCustomDashboardInfo(serverDefault + data.custom_info, function () {\n initializeDynamicDashboardWithData(data);\n });\n } else {\n //console.log('not loading custom dashboard decorations from server ' + initializeConfig.url);\n initializeDynamicDashboardWithData(data);\n }\n }\n });\n })\n}\n\nwindow.xssModalDisableXss = () => {\n //console.log('disabling xss checks');\n NETDATA.xss.enabled = false;\n NETDATA.xss.enabled_for_data = false;\n initializeConfig.custom_info = true;\n initializeChartsAndCustomInfo();\n return false;\n};\n\n\nwindow.xssModalKeepXss = () => {\n //console.log('keeping xss checks');\n NETDATA.xss.enabled = true;\n NETDATA.xss.enabled_for_data = true;\n initializeConfig.custom_info = false;\n initializeChartsAndCustomInfo();\n return false;\n};\n\nfunction initializeDynamicDashboard(newReduxStore) {\n if (newReduxStore) {\n reduxStore = newReduxStore\n\n netdataPrepCallback()\n\n initializeConfig.url = serverDefault;\n }\n\n if (typeof netdataCheckXSS !== 'undefined' && netdataCheckXSS === true) {\n //$(\"#loadOverlay\").css(\"display\",\"none\");\n document.getElementById('netdataXssModalServer').innerText = initializeConfig.url;\n $('#xssModal').modal('show');\n } else {\n initializeChartsAndCustomInfo();\n }\n}\n\n// ----------------------------------------------------------------------------\n\nfunction versionLog(msg) {\n document.getElementById('versionCheckLog').innerHTML = msg;\n}\n\n// New way of checking for updates, based only on versions\n\nfunction versionsMatch(v1, v2) {\n if (v1 == v2) {\n return true;\n } else {\n let s1 = v1.split('.');\n let s2 = v2.split('.');\n // Check major version\n let n1 = parseInt(s1[0].substring(1, 2), 10);\n let n2 = parseInt(s2[0].substring(1, 2), 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n // Check minor version\n n1 = parseInt(s1[1], 10);\n n2 = parseInt(s2[1], 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n // Split patch: format could be e.g. 0-22-nightly\n s1 = s1[2].split('-');\n s2 = s2[2].split('-');\n\n n1 = parseInt(s1[0], 10);\n n2 = parseInt(s2[0], 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n n1 = (s1.length > 1) ? parseInt(s1[1], 10) : 0;\n n2 = (s2.length > 1) ? parseInt(s2[1], 10) : 0;\n if (n1 < n2) return false;\n else return true;\n }\n}\n\nfunction getGithubLatestVersion(callback) {\n versionLog('Downloading latest version id from github...');\n\n $.ajax({\n url: 'https://api.github.com/repos/netdata/netdata/releases/latest',\n async: true,\n cache: false\n })\n .done(function (data) {\n data = data.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\");\n versionLog('Latest stable version from github is ' + data);\n callback(data);\n })\n .fail(function () {\n versionLog('Failed to download the latest stable version id from github!');\n callback(null);\n });\n}\n\nfunction getGCSLatestVersion(callback) {\n versionLog('Downloading latest version id from GCS...');\n $.ajax({\n url: \"https://www.googleapis.com/storage/v1/b/netdata-nightlies/o/latest-version.txt\",\n async: true,\n cache: false\n })\n .done(function (response) {\n $.ajax({\n url: response.mediaLink,\n async: true,\n cache: false\n })\n .done(function (data) {\n data = data.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\");\n versionLog('Latest nightly version from GCS is ' + data);\n callback(data);\n })\n .fail(function (xhr, textStatus, errorThrown) {\n versionLog('Failed to download the latest nightly version id from GCS!');\n callback(null);\n });\n })\n .fail(function (xhr, textStatus, errorThrown) {\n versionLog('Failed to download the latest nightly version from GCS!');\n callback(null);\n });\n}\n\n\nfunction checkForUpdateByVersion(force, callback) {\n if (options.release_channel === 'stable') {\n getGithubLatestVersion(function (sha2) {\n callback(options.version, sha2);\n });\n } else {\n getGCSLatestVersion(function (sha2) {\n callback(options.version, sha2);\n });\n }\n return null;\n}\n\nwindow.notifyForUpdate = (force) => {\n versionLog('<p>checking for updates...</p>');\n\n var now = Date.now();\n\n if (typeof force === 'undefined' || force !== true) {\n var last = loadLocalStorage('last_update_check');\n\n if (typeof last === 'string') {\n last = parseInt(last);\n } else {\n last = 0;\n }\n\n if (now - last < 3600000 * 8) {\n // no need to check it - too soon\n return;\n }\n }\n\n checkForUpdateByVersion(force, function (sha1, sha2) {\n var save = false;\n\n if (sha1 === null) {\n save = false;\n versionLog('<p><big>Failed to get your netdata version!</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n } else if (sha2 === null) {\n save = false;\n versionLog('<p><big>Failed to get the latest netdata version.</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n } else if (versionsMatch(sha1, sha2)) {\n save = true;\n versionLog('<p><big>You already have the latest netdata!</big></p><p>No update yet?<br/>We probably need some motivation to keep going on!</p><p>If you haven\\'t already, <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">give netdata a <b><i class=\"fas fa-star\"></i></b> at its github page</a>.</p>');\n } else {\n save = true;\n var compare = 'https://learn.netdata.cloud/docs/agent/changelog/';\n versionLog('<p><big><strong>New version of netdata available!</strong></big></p><p>Latest version: <b><code>' + sha2 + '</code></b></p><p><a href=\"' + compare + '\" target=\"_blank\">Click here for the changes log</a> and<br/><a href=\"https://github.com/netdata/netdata/tree/master/packaging/installer/UPDATE.md\" target=\"_blank\">click here for directions on updating</a> your netdata installation.</p><p>We suggest to review the changes log for new features you may be interested, or important bug fixes you may need.<br/>Keeping your netdata updated is generally a good idea.</p>');\n }\n\n if (save) {\n saveLocalStorage('last_update_check', now.toString());\n }\n });\n}\n\n// ----------------------------------------------------------------------------\n// printing dashboards\n\nfunction showPageFooter() {\n document.getElementById('footer').style.display = 'block';\n}\n\nwindow.printPreflight = () => {\n var url = document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString() + urlOptions.genHash() + ';mode=print';\n var width = 990;\n var height = screen.height * 90 / 100;\n //console.log(url);\n //console.log(document.location);\n window.open(url, '', 'width=' + width.toString() + ',height=' + height.toString() + ',menubar=no,toolbar=no,personalbar=no,location=no,resizable=no,scrollbars=yes,status=no,chrome=yes,centerscreen=yes,attention=yes,dialog=yes');\n $('#printPreflightModal').modal('hide');\n}\n\nfunction printPage() {\n window.NETDATA.parseDom();\n if (urlOptions.pan_and_zoom === true) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: urlOptions.after,\n before: urlOptions.before,\n }))\n }\n showPageFooter(); // todo after full rewrite the footer should show when charts are loaded\n}\n\n// --------------------------------------------------------------------\n\nfunction jsonStringifyFn(obj) {\n return JSON.stringify(obj, function (key, value) {\n return (typeof value === 'function') ? value.toString() : value;\n });\n}\n\nfunction jsonParseFn(str) {\n return JSON.parse(str, function (key, value) {\n if (typeof value != 'string') {\n return value;\n }\n return (value.substring(0, 8) == 'function') ? eval('(' + value + ')') : value;\n });\n}\n\n// --------------------------------------------------------------------\n\nvar snapshotOptions = {\n bytes_per_chart: 2048,\n compressionDefault: 'pako.deflate.base64',\n\n compressions: {\n 'none': {\n bytes_per_point_memory: 5.2,\n bytes_per_point_disk: 5.6,\n\n compress: function (s) {\n return s;\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return s;\n }\n },\n\n 'pako.deflate.base64': {\n bytes_per_point_memory: 1.8,\n bytes_per_point_disk: 1.9,\n\n compress: function (s) {\n return btoa(pako.deflate(s, { to: 'string' }));\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return pako.inflate(atob(s), { to: 'string' });\n }\n },\n\n 'pako.deflate': {\n bytes_per_point_memory: 1.4,\n bytes_per_point_disk: 3.2,\n\n compress: function (s) {\n return pako.deflate(s, { to: 'string' });\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return pako.inflate(s, { to: 'string' });\n }\n },\n\n 'lzstring.utf16': {\n bytes_per_point_memory: 1.7,\n bytes_per_point_disk: 2.6,\n\n compress: function (s) {\n return LZString.compressToUTF16(s);\n },\n\n compressed_length: function (s) {\n return s.length * 2;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromUTF16(s);\n }\n },\n\n 'lzstring.base64': {\n bytes_per_point_memory: 2.1,\n bytes_per_point_disk: 2.3,\n\n compress: function (s) {\n return LZString.compressToBase64(s);\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromBase64(s);\n }\n },\n\n 'lzstring.uri': {\n bytes_per_point_memory: 2.1,\n bytes_per_point_disk: 2.3,\n\n compress: function (s) {\n return LZString.compressToEncodedURIComponent(s);\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromEncodedURIComponent(s);\n }\n }\n }\n};\n\n// --------------------------------------------------------------------\n// loading snapshots\n\nfunction loadSnapshotModalLog(priority, msg) {\n document.getElementById('loadSnapshotStatus').className = \"alert alert-\" + priority;\n document.getElementById('loadSnapshotStatus').innerHTML = msg;\n}\n\nvar tmpSnapshotData = null;\n\nwindow.loadSnapshot = () => {\n $('#loadSnapshotImport').addClass('disabled');\n\n if (tmpSnapshotData === null) {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'no data have been loaded');\n return;\n }\n\n loadPako(function () {\n loadLzString(function () {\n loadSnapshotModalLog('info', 'Please wait, activating snapshot...');\n $('#loadSnapshotModal').modal('hide');\n\n netdataShowAlarms = false;\n netdataRegistry = false;\n netdataServer = tmpSnapshotData.server;\n\n document.getElementById('charts_div').innerHTML = '';\n document.getElementById('sidebar').innerHTML = '';\n\n if (typeof tmpSnapshotData.hash !== 'undefined') {\n urlOptions.hash = tmpSnapshotData.hash;\n } else {\n urlOptions.hash = '#';\n }\n\n if (typeof tmpSnapshotData.info !== 'undefined') {\n var info = jsonParseFn(tmpSnapshotData.info);\n if (typeof info.menu !== 'undefined') {\n netdataDashboard.menu = info.menu;\n }\n\n if (typeof info.submenu !== 'undefined') {\n netdataDashboard.submenu = info.submenu;\n }\n\n if (typeof info.context !== 'undefined') {\n netdataDashboard.context = info.context;\n }\n }\n\n if (typeof tmpSnapshotData.compression !== 'string') {\n tmpSnapshotData.compression = 'none';\n }\n\n if (typeof snapshotOptions.compressions[tmpSnapshotData.compression] === 'undefined') {\n alert('unknown compression method: ' + tmpSnapshotData.compression);\n tmpSnapshotData.compression = 'none';\n }\n\n tmpSnapshotData.uncompress = snapshotOptions.compressions[tmpSnapshotData.compression].uncompress;\n\n window.NETDATA.parseDom()\n reduxStore.dispatch(loadSnapshotAction({\n snapshot: tmpSnapshotData,\n }))\n\n window.netdataSnapshotData = tmpSnapshotData;\n\n urlOptions.after = tmpSnapshotData.after_ms;\n urlOptions.before = tmpSnapshotData.before_ms;\n\n if (typeof tmpSnapshotData.highlight_after_ms !== 'undefined'\n && tmpSnapshotData.highlight_after_ms !== null\n && tmpSnapshotData.highlight_after_ms > 0\n && typeof tmpSnapshotData.highlight_before_ms !== 'undefined'\n && tmpSnapshotData.highlight_before_ms !== null\n && tmpSnapshotData.highlight_before_ms > 0\n ) {\n urlOptions.highlight_after = tmpSnapshotData.highlight_after_ms;\n urlOptions.highlight_before = tmpSnapshotData.highlight_before_ms;\n urlOptions.highlight = true;\n } else {\n urlOptions.highlight_after = 0;\n urlOptions.highlight_before = 0;\n urlOptions.highlight = false;\n }\n\n netdataCheckXSS = false; // disable the modal - this does not affect XSS checks, since dashboard.js is already loaded\n NETDATA.xss.enabled = true; // we should not do any remote requests, but if we do, check them\n NETDATA.xss.enabled_for_data = true; // check also snapshot data - that have been excluded from the initial check, due to compression\n loadSnapshotPreflightEmpty();\n initializeDynamicDashboard();\n });\n });\n};\n\nfunction loadSnapshotPreflightFile(file) {\n var filename = NETDATA.xss.string(file.name);\n var fr = new FileReader();\n fr.onload = function (e) {\n document.getElementById('loadSnapshotFilename').innerHTML = filename;\n var result = null;\n try {\n result = NETDATA.xss.checkAlways('snapshot', JSON.parse(e.target.result), /^(snapshot\\.info|snapshot\\.data)$/);\n\n //console.log(result);\n var date_after = new Date(result.after_ms);\n var date_before = new Date(result.before_ms);\n\n if (typeof result.charts_ok === 'undefined') {\n result.charts_ok = 'unknown';\n }\n\n if (typeof result.charts_failed === 'undefined') {\n result.charts_failed = 0;\n }\n\n if (typeof result.compression === 'undefined') {\n result.compression = 'none';\n }\n\n if (typeof result.data_size === 'undefined') {\n result.data_size = 0;\n }\n\n document.getElementById('loadSnapshotFilename').innerHTML = '<code>' + filename + '</code>';\n document.getElementById('loadSnapshotHostname').innerHTML = '<b>' + result.hostname + '</b>, netdata version: <b>' + result.netdata_version.toString() + '</b>';\n document.getElementById('loadSnapshotURL').innerHTML = result.url;\n document.getElementById('loadSnapshotCharts').innerHTML = result.charts.charts_count.toString() + ' charts, ' + result.charts.dimensions_count.toString() + ' dimensions, ' + result.data_points.toString() + ' points per dimension, ' + Math.round(result.duration_ms / result.data_points).toString() + ' ms per point';\n document.getElementById('loadSnapshotInfo').innerHTML = 'version: <b>' + result.snapshot_version.toString() + '</b>, includes <b>' + result.charts_ok.toString() + '</b> unique chart data queries ' + ((result.charts_failed > 0) ? ('<b>' + result.charts_failed.toString() + '</b> failed') : '').toString() + ', compressed with <code>' + result.compression.toString() + '</code>, data size ' + (Math.round(result.data_size * 100 / 1024 / 1024) / 100).toString() + ' MB';\n document.getElementById('loadSnapshotTimeRange').innerHTML = '<b>' + localeDateString(date_after) + ' ' + localeTimeString(date_after) + '</b> to <b>' + localeDateString(date_before) + ' ' + localeTimeString(date_before) + '</b>';\n document.getElementById('loadSnapshotComments').innerHTML = ((result.comments) ? result.comments : '').toString();\n loadSnapshotModalLog('success', 'File loaded, click <b>Import</b> to render it!');\n $('#loadSnapshotImport').removeClass('disabled');\n\n tmpSnapshotData = result;\n }\n catch (e) {\n console.log(e);\n document.getElementById('loadSnapshotStatus').className = \"alert alert-danger\";\n document.getElementById('loadSnapshotStatus').innerHTML = \"Failed to parse this file!\";\n $('#loadSnapshotImport').addClass('disabled');\n }\n }\n\n //console.log(file);\n fr.readAsText(file);\n};\n\nfunction loadSnapshotPreflightEmpty() {\n document.getElementById('loadSnapshotFilename').innerHTML = '';\n document.getElementById('loadSnapshotHostname').innerHTML = '';\n document.getElementById('loadSnapshotURL').innerHTML = '';\n document.getElementById('loadSnapshotCharts').innerHTML = '';\n document.getElementById('loadSnapshotInfo').innerHTML = '';\n document.getElementById('loadSnapshotTimeRange').innerHTML = '';\n document.getElementById('loadSnapshotComments').innerHTML = '';\n loadSnapshotModalLog('success', 'Browse for a snapshot file (or drag it and drop it here), then click <b>Import</b> to render it.');\n $('#loadSnapshotImport').addClass('disabled');\n};\n\nvar loadSnapshotDragAndDropInitialized = false;\n\nfunction loadSnapshotDragAndDropSetup() {\n if (loadSnapshotDragAndDropInitialized === false) {\n loadSnapshotDragAndDropInitialized = true;\n $('#loadSnapshotDragAndDrop')\n .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {\n e.preventDefault();\n e.stopPropagation();\n })\n .on('drop', function (e) {\n if (e.originalEvent.dataTransfer.files.length) {\n loadSnapshotPreflightFile(e.originalEvent.dataTransfer.files.item(0));\n } else {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'No file selected');\n }\n });\n }\n};\n\nwindow.loadSnapshotPreflight = () => {\n var files = document.getElementById('loadSnapshotSelectFiles').files;\n if (!files.length) {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'No file selected');\n return;\n }\n\n loadSnapshotModalLog('info', 'Loading file...');\n\n loadSnapshotPreflightFile(files.item(0));\n}\n\n// --------------------------------------------------------------------\n// saving snapshots\n\nvar saveSnapshotStop = false;\n\nfunction saveSnapshotCancel() {\n reduxStore.dispatch(stopSnapshotModeAction())\n saveSnapshotStop = true;\n}\n\nvar saveSnapshotModalInitialized = false;\n\nfunction saveSnapshotModalSetup() {\n if (saveSnapshotModalInitialized === false) {\n saveSnapshotModalInitialized = true;\n $('#saveSnapshotModal')\n .on('hide.bs.modal', saveSnapshotCancel)\n .on('show.bs.modal', saveSnapshotModalInit)\n .on('shown.bs.modal', function () {\n $('#saveSnapshotResolutionSlider').find(\".slider-handle:first\").attr(\"tabindex\", 1);\n document.getElementById('saveSnapshotComments').focus();\n });\n }\n};\n\nfunction saveSnapshotModalLog(priority, msg) {\n document.getElementById('saveSnapshotStatus').className = \"alert alert-\" + priority;\n document.getElementById('saveSnapshotStatus').innerHTML = msg;\n}\n\nfunction saveSnapshotModalShowExpectedSize() {\n var points = Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint);\n var priority = 'info';\n var msg = 'A moderate snapshot.';\n\n var sizemb = Math.round(\n (options.data.charts_count * snapshotOptions.bytes_per_chart\n + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_disk)\n * 10 / 1024 / 1024) / 10;\n\n var memmb = Math.round(\n (options.data.charts_count * snapshotOptions.bytes_per_chart\n + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_memory)\n * 10 / 1024 / 1024) / 10;\n\n if (sizemb < 10) {\n priority = 'success';\n msg = 'A nice small snapshot!';\n }\n if (sizemb > 50) {\n priority = 'warning';\n msg = 'Will stress your browser...';\n }\n if (sizemb > 100) {\n priority = 'danger';\n msg = 'Hm... good luck...';\n }\n\n saveSnapshotModalLog(priority, 'The snapshot will have ' + points.toString() + ' points per dimension. Expected size on disk ' + sizemb + ' MB, at browser memory ' + memmb + ' MB.<br/>' + msg);\n}\n\nvar saveSnapshotCompression = snapshotOptions.compressionDefault;\n\nfunction saveSnapshotSetCompression(name) {\n saveSnapshotCompression = name;\n document.getElementById('saveSnapshotCompressionName').innerHTML = saveSnapshotCompression;\n saveSnapshotModalShowExpectedSize();\n}\n\nvar saveSnapshotSlider = null;\nvar saveSnapshotSelectedSecondsPerPoint = 1;\nvar saveSnapshotViewDuration = 1;\n\nfunction saveSnapshotModalInit() {\n $('#saveSnapshotModalProgressSection').hide();\n $('#saveSnapshotResolutionRadio').show();\n saveSnapshotModalLog('info', 'Select resolution and click <b>Save</b>');\n $('#saveSnapshotExport').removeClass('disabled');\n\n loadBootstrapSlider(function () {\n const reduxState = reduxStore.getState()\n saveSnapshotViewDuration = - selectDefaultAfter(reduxState)\n var start_ms = Math.round(Date.now() - saveSnapshotViewDuration * 1000);\n const globalPanAndZoom = selectGlobalPanAndZoom(reduxState)\n\n if (Boolean(globalPanAndZoom)) {\n saveSnapshotViewDuration = Math.round((globalPanAndZoom.before - globalPanAndZoom.after) / 1000);\n start_ms = globalPanAndZoom.after;\n }\n\n var start_date = new Date(start_ms);\n var yyyymmddhhssmm = start_date.getFullYear() + zeropad(start_date.getMonth() + 1) + zeropad(start_date.getDate()) + '-' + zeropad(start_date.getHours()) + zeropad(start_date.getMinutes()) + zeropad(start_date.getSeconds());\n\n document.getElementById('saveSnapshotFilename').value = 'netdata-' + options.hostname.toString() + '-' + yyyymmddhhssmm.toString() + '-' + saveSnapshotViewDuration.toString() + '.snapshot';\n saveSnapshotSetCompression(saveSnapshotCompression);\n\n var min = options.update_every;\n var max = Math.round(saveSnapshotViewDuration / 100);\n\n if (Boolean(globalPanAndZoom)) {\n max = Math.round(saveSnapshotViewDuration / 50);\n }\n\n var view = Math.round(saveSnapshotViewDuration / Math.round($(document.getElementById('charts_div')).width() / 2));\n\n if (max < 10) {\n max = 10;\n }\n if (max < min) {\n max = min;\n }\n if (view < min) {\n view = min;\n }\n if (view > max) {\n view = max;\n }\n\n if (saveSnapshotSlider !== null) {\n saveSnapshotSlider.destroy();\n }\n\n saveSnapshotSlider = new Slider('#saveSnapshotResolutionSlider', {\n ticks: [min, view, max],\n min: min,\n max: max,\n step: options.update_every,\n value: view,\n scale: (max > 100) ? 'logarithmic' : 'linear',\n tooltip: 'always',\n formatter: function (value) {\n if (value < 1) {\n value = 1;\n }\n\n if (value < options.data.update_every) {\n value = options.data.update_every;\n }\n\n saveSnapshotSelectedSecondsPerPoint = value;\n saveSnapshotModalShowExpectedSize();\n\n var seconds = ' seconds ';\n if (value === 1) {\n seconds = ' second ';\n }\n\n return value + seconds + 'per point' + ((value === options.data.update_every) ? ', server default' : '').toString();\n }\n });\n });\n}\n\nwindow.saveSnapshot = () => {\n loadPako(function () {\n loadLzString(function () {\n saveSnapshotStop = false;\n $('#saveSnapshotModalProgressSection').show();\n $('#saveSnapshotResolutionRadio').hide();\n $('#saveSnapshotExport').addClass('disabled');\n\n var filename = document.getElementById('saveSnapshotFilename').value;\n // console.log(filename);\n saveSnapshotModalLog('info', 'Generating snapshot as <code>' + filename.toString() + '</code>');\n\n\n var el = document.getElementById('saveSnapshotModalProgressBar');\n var eltxt = document.getElementById('saveSnapshotModalProgressBarText');\n\n options.data.charts_by_name = null;\n const reduxState = reduxStore.getState()\n const defaultAfter = selectDefaultAfter(reduxState)\n\n var saveData = {\n hostname: options.hostname,\n server: serverDefault,\n netdata_version: options.data.version,\n snapshot_version: 1,\n after_ms: Date.now() + defaultAfter * 1000,\n before_ms: Date.now(),\n highlight_after_ms: urlOptions.highlight_after,\n highlight_before_ms: urlOptions.highlight_before,\n duration_ms: options.duration * 1000,\n update_every_ms: options.update_every * 1000,\n data_points: 0,\n url: ((urlOptions.server !== null) ? urlOptions.server : document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString()).toString(),\n comments: document.getElementById('saveSnapshotComments').value.toString(),\n hash: urlOptions.hash,\n charts: options.data,\n info: jsonStringifyFn({\n menu: netdataDashboard.menu,\n submenu: netdataDashboard.submenu,\n context: netdataDashboard.context\n }),\n charts_ok: 0,\n charts_failed: 0,\n compression: saveSnapshotCompression,\n data_size: 0,\n data: {}\n };\n\n if (typeof snapshotOptions.compressions[saveData.compression] === 'undefined') {\n alert('unknown compression method: ' + saveData.compression);\n saveData.compression = 'none';\n }\n\n var compress = snapshotOptions.compressions[saveData.compression].compress;\n var compressed_length = snapshotOptions.compressions[saveData.compression].compressed_length;\n\n function pack_api1_v1_chart_data({ data, chartDataUniqueID }) {\n if (data === null) {\n return 0\n }\n\n var str = JSON.stringify(data);\n\n var cstr = compress(str);\n saveData.data[chartDataUniqueID] = cstr;\n return compressed_length(cstr);\n }\n\n const globalPanAndZoom = selectGlobalPanAndZoom(reduxState)\n var clearPanAndZoom = false;\n if (!globalPanAndZoom) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: saveData.after_ms,\n before: saveData.before_ms,\n }))\n clearPanAndZoom = true;\n } else {\n saveData.after_ms = globalPanAndZoom.after\n saveData.before_ms = globalPanAndZoom.before\n }\n\n\n saveData.duration_ms = saveData.before_ms - saveData.after_ms;\n saveData.data_points = Math.round((saveData.before_ms - saveData.after_ms) / (saveSnapshotSelectedSecondsPerPoint * 1000));\n saveSnapshotModalLog('info', 'Generating snapshot with ' + saveData.data_points.toString() + ' data points per dimension...');\n\n reduxStore.dispatch(startSnapshotModeAction({\n charts: saveData.charts,\n dataPoints: saveData.data_points,\n }))\n\n\n window.saveSnapshotRestore = () => {\n $('#saveSnapshotModal').modal('hide');\n\n $(el).css('width', '0%').attr('aria-valuenow', 0);\n eltxt.innerText = '0%';\n\n reduxStore.dispatch(stopSnapshotModeAction())\n reduxStore.dispatch(snapshotExportResetAction())\n if (clearPanAndZoom) {\n // clear that afterwards\n reduxStore.dispatch(resetGlobalPanAndZoomAction())\n }\n\n $('#saveSnapshotExport').removeClass('disabled');\n }\n\n var size = 0;\n var info = ' Resolution: <b>' + saveSnapshotSelectedSecondsPerPoint.toString() + ((saveSnapshotSelectedSecondsPerPoint === 1) ? ' second ' : ' seconds ').toString() + 'per point</b>.';\n\n window.chartUpdated = ({ chart, chartDataUniqueID, data }) => {\n if (saveSnapshotStop === true) {\n saveSnapshotModalLog('info', 'Cancelled!');\n saveSnapshotRestore()\n }\n const state = reduxStore.getState()\n const chartsCount = selectAmountOfCharts(state)\n const chartsOk = selectAmountOfSnapshotsFetched(state) // hook\n const chartsFailed = selectAmountOfSnapshotsFailed(state)\n\n const pcent = ((chartsOk + chartsFailed) / chartsCount) * 100\n $(el).css('width', pcent + '%').attr('aria-valuenow', pcent);\n eltxt.innerText = Math.round(pcent).toString() + '%, ' + (chart || data.id)\n\n size += pack_api1_v1_chart_data({ data, chartDataUniqueID })\n\n saveSnapshotModalLog((chartsFailed) ? 'danger' : 'info', 'Generated snapshot data size <b>' + (Math.round(size * 100 / 1024 / 1024) / 100).toString() + ' MB</b>. ' + ((chartsFailed) ? (chartsFailed.toString() + ' charts have failed to be downloaded') : '').toString() + info);\n\n window.saveData = saveData\n // better not to use equality against pcent in case of floating point errors\n if (chartsOk + chartsFailed === chartsCount) {\n saveData.charts_ok = chartsOk\n saveData.charts_failed = chartsFailed\n saveData.data_size = size\n\n saveObjectToClient(saveData, filename)\n if (chartsFailed > 0) {\n alert(`${chartsFailed} failed to be downloaded`);\n }\n saveSnapshotRestore()\n saveData = null\n }\n }\n\n // called for every chart\n function update_chart(idx) {\n if (saveSnapshotStop === true) {\n saveSnapshotModalLog('info', 'Cancelled!');\n saveSnapshotRestore();\n return;\n }\n\n var state = NETDATA.options.targets[--idx];\n\n var pcent = (NETDATA.options.targets.length - idx) * 100 / NETDATA.options.targets.length;\n $(el).css('width', pcent + '%').attr('aria-valuenow', pcent);\n eltxt.innerText = Math.round(pcent).toString() + '%, ' + state.id;\n\n setTimeout(function () {\n charts_count++;\n state.isVisible(true);\n state.current.force_after_ms = saveData.after_ms;\n state.current.force_before_ms = saveData.before_ms;\n\n state.updateChart(function (status, reason) {\n state.current.force_after_ms = null;\n state.current.force_before_ms = null;\n\n if (status === true) {\n charts_ok++;\n // state.log('ok');\n size += pack_api1_v1_chart_data(state);\n } else {\n charts_failed++;\n state.log('failed to be updated: ' + reason);\n }\n\n saveSnapshotModalLog((charts_failed) ? 'danger' : 'info', 'Generated snapshot data size <b>' + (Math.round(size * 100 / 1024 / 1024) / 100).toString() + ' MB</b>. ' + ((charts_failed) ? (charts_failed.toString() + ' charts have failed to be downloaded') : '').toString() + info);\n\n if (idx > 0) {\n update_chart(idx);\n } else {\n saveData.charts_ok = charts_ok;\n saveData.charts_failed = charts_failed;\n saveData.data_size = size;\n // console.log(saveData.compression + ': ' + (size / (options.data.dimensions_count * Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint))).toString());\n\n // save it\n // console.log(saveData);\n saveObjectToClient(saveData, filename);\n\n if (charts_failed > 0) {\n alert(charts_failed.toString() + ' failed to be downloaded');\n }\n\n saveSnapshotRestore();\n saveData = null;\n }\n })\n }, 0);\n }\n\n });\n });\n}\n\n// --------------------------------------------------------------------\n// activate netdata on the page\nlet browser_timezone\ntry {\n browser_timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n} catch (e) {\n console.log('failed to detect browser timezone: ' + e.toString());\n browser_timezone = 'cannot-detect-it';\n}\n\nconst getOption = (option) => {\n const state = reduxStore.getState()\n return createSelectOption(option)(state)\n}\n\n\nfunction dashboardSettingsSetup() {\n var update_options_modal = function () {\n var sync_option = function (option) {\n var self = $('#' + option);\n\n if (self.prop('checked') !== getOption(option)) {\n // console.log('switching ' + option.toString());\n self.bootstrapToggle(getOption(option) ? 'on' : 'off');\n }\n };\n\n var theme_sync_option = function (option) {\n var self = $('#' + option);\n\n self.bootstrapToggle(netdataTheme === 'slate' ? 'on' : 'off');\n };\n var units_sync_option = function (option) {\n var self = $('#' + option);\n\n if (self.prop('checked') !== (getOption('units') === 'auto')) {\n self.bootstrapToggle(getOption('units') === 'auto' ? 'on' : 'off');\n }\n\n if (self.prop('checked') === true) {\n $('#settingsLocaleTempRow').show();\n $('#settingsLocaleTimeRow').show();\n } else {\n $('#settingsLocaleTempRow').hide();\n $('#settingsLocaleTimeRow').hide();\n }\n };\n var temp_sync_option = function (option) {\n var self = $('#' + option);\n\n if (self.prop('checked') !== (getOption('temperature') === 'celsius')) {\n self.bootstrapToggle(getOption('temperature') === 'celsius' ? 'on' : 'off');\n }\n };\n\n sync_option('stop_updates_when_focus_is_lost');\n sync_option('eliminate_zero_dimensions');\n sync_option('destroy_on_hide');\n sync_option('async_on_scroll');\n\n sync_option('parallel_refresher');\n sync_option('concurrent_refreshes');\n sync_option('sync_selection');\n\n sync_option('legend_right');\n theme_sync_option('netdata_theme_control');\n sync_option('show_help');\n sync_option('pan_and_zoom_data_padding');\n sync_option('smooth_plot');\n\n units_sync_option('units_conversion');\n temp_sync_option('units_temp');\n sync_option('seconds_as_time');\n\n if (getOption('parallel_refresher') === false) {\n $('#concurrent_refreshes_row').hide();\n } else {\n $('#concurrent_refreshes_row').show();\n }\n };\n\n update_options_modal();\n\n // handle options changes\n $('#eliminate_zero_dimensions').change(function () {\n setOption('eliminate_zero_dimensions', $(this).prop('checked'));\n });\n $('#destroy_on_hide').change(function () {\n setOption('destroy_on_hide', $(this).prop('checked'));\n });\n $('#async_on_scroll').change(function () {\n setOption('async_on_scroll', $(this).prop('checked'));\n });\n $('#parallel_refresher').change(function () {\n setOption('parallel_refresher', $(this).prop('checked'));\n });\n $('#concurrent_refreshes').change(function () {\n setOption('concurrent_refreshes', $(this).prop('checked'));\n });\n $('#sync_selection').change(function () {\n setOption('sync_selection', $(this).prop('checked'));\n netdataReload();\n });\n $('#stop_updates_when_focus_is_lost').change(function () {\n urlOptions.update_always = !$(this).prop('checked');\n urlOptions.hashUpdate();\n\n setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always);\n });\n $('#smooth_plot').change(function () {\n setOption('smooth_plot', $(this).prop('checked'));\n });\n $('#pan_and_zoom_data_padding').change(function () {\n setOption('pan_and_zoom_data_padding', $(this).prop('checked'));\n });\n $('#seconds_as_time').change(function () {\n setOption('seconds_as_time', $(this).prop('checked'));\n });\n\n $('#units_conversion').change(function () {\n setOption('units', $(this).prop('checked') ? 'auto' : 'original');\n update_options_modal()\n });\n $('#units_temp').change(function () {\n setOption('temperature', $(this).prop('checked') ? 'celsius' : 'fahrenheit');\n });\n\n $('#legend_right').change(function () {\n setOption('legend_right', $(this).prop('checked'));\n // reloading for now, it's much easier than rebuilding charts bootstraping in main.js\n netdataReload();\n });\n\n $('#show_help').change(function () {\n urlOptions.help = $(this).prop('checked');\n urlOptions.hashUpdate();\n\n setOption('show_help', urlOptions.help);\n netdataReload();\n });\n\n // this has to be the last\n // it reloads the page\n $('#netdata_theme_control').change(function () {\n urlOptions.theme = $(this).prop('checked') ? 'slate' : 'white';\n urlOptions.hashUpdate();\n\n if (setTheme(urlOptions.theme)) {\n netdataReload();\n }\n });\n}\n\nconst CHART_DIV_ID_PREFIX = 'chart_'\nconst CHART_DIV_OFFSET = -50\n\nfunction scrollDashboardTo() {\n if (window.netdataSnapshotData !== null && typeof window.netdataSnapshotData.hash !== 'undefined') {\n scrollToId(window.netdataSnapshotData.hash.replace('#', ''));\n } else {\n // check if we have to jump to a specific section\n scrollToId(urlOptions.hash.replace('#', ''));\n if (urlOptions.chart !== null) {\n const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(urlOptions.chart)}`)\n if (chartElement) {\n const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n document.querySelector(\"html\").scrollTop = offset\n }\n }\n }\n}\n\nvar modalHiddenCallback = null;\n\nwindow.scrollToChartAfterHidingModal = (chart, alarmDate, alarmStatus) => {\n modalHiddenCallback = function () {\n\n if (typeof chart === 'string') {\n const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(chart)}`)\n if (chartElement) {\n const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n document.querySelector(\"html\").scrollTop = offset\n }\n }\n\n if (['WARNING', 'CRITICAL'].includes(alarmStatus)) {\n const twoMinutes = 2 * 60 * 1000\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: alarmDate - twoMinutes,\n before: alarmDate + twoMinutes,\n }))\n }\n };\n}\n\n// ----------------------------------------------------------------------------\n\nfunction enableTooltipsAndPopovers() {\n $('[data-toggle=\"tooltip\"]').tooltip({\n animated: 'fade',\n trigger: 'hover',\n html: true,\n delay: { show: 500, hide: 0 },\n container: 'body'\n });\n $('[data-toggle=\"popover\"]').popover();\n}\n\n// ----------------------------------------------------------------------------\n\nvar runOnceOnDashboardLastRun = 0;\n\nfunction runOnceOnDashboardWithjQuery() {\n if (runOnceOnDashboardLastRun !== 0) {\n scrollDashboardTo();\n\n // restore the scrollspy at the proper position\n $(document.body).scrollspy('refresh');\n $(document.body).scrollspy('process');\n\n return;\n }\n\n runOnceOnDashboardLastRun = Date.now();\n\n // ------------------------------------------------------------------------\n // bootstrap modals\n\n // prevent bootstrap modals from scrolling the page\n // maintains the current scroll position\n // https://stackoverflow.com/a/34754029/4525767\n\n var scrollPos = 0;\n var modal_depth = 0; // how many modals are currently open\n var modal_shown = false; // set to true, if a modal is shown\n var netdata_paused_on_modal = false; // set to true, if the modal paused netdata\n var scrollspyOffset = $(window).height() / 3; // will be updated below - the offset of scrollspy to select an item\n\n $('.modal')\n .on('show.bs.modal', function () {\n if (modal_depth === 0) {\n scrollPos = window.scrollY;\n\n $('body').css({\n overflow: 'hidden',\n position: 'fixed',\n top: -scrollPos\n });\n\n modal_shown = true;\n\n if (NETDATA.options.pauseCallback === null) {\n NETDATA.pause(function () {\n });\n netdata_paused_on_modal = true;\n } else {\n netdata_paused_on_modal = false;\n }\n }\n\n modal_depth++;\n //console.log(urlOptions.after);\n\n })\n .on('hide.bs.modal', function () {\n\n modal_depth--;\n\n if (modal_depth <= 0) {\n modal_depth = 0;\n\n $('body')\n .css({\n overflow: '',\n position: '',\n top: ''\n });\n\n // scroll to the position we had open before the modal\n $('html, body')\n .animate({ scrollTop: scrollPos }, 0);\n\n // unpause netdata, if we paused it\n if (netdata_paused_on_modal === true) {\n NETDATA.unpause();\n netdata_paused_on_modal = false;\n }\n\n // restore the scrollspy at the proper position\n $(document.body).scrollspy('process');\n }\n //console.log(urlOptions.after);\n })\n .on('hidden.bs.modal', function () {\n if (modal_depth === 0) {\n modal_shown = false;\n }\n\n if (typeof modalHiddenCallback === 'function') {\n modalHiddenCallback();\n }\n\n modalHiddenCallback = null;\n //console.log(urlOptions.after);\n });\n\n // ------------------------------------------------------------------------\n // sidebar / affix\n\n $('#sidebar')\n .affix({\n offset: {\n top: 0,\n bottom: 0\n }\n })\n .on('affixed.bs.affix', function () {\n // fix scrolling of very long affix lists\n // http://stackoverflow.com/questions/21691585/bootstrap-3-1-0-affix-too-long\n\n $(this).removeAttr('style');\n })\n .on('affix-top.bs.affix', function () {\n // fix bootstrap affix click bug\n // https://stackoverflow.com/a/37847981/4525767\n\n if (modal_shown) {\n return false;\n }\n })\n .on('activate.bs.scrollspy', function (e) {\n // change the URL based on the current position of the screen\n\n if (modal_shown === false) {\n var el = $(e.target);\n var hash = el.find('a').attr('href');\n if (typeof hash === 'string' && hash.substring(0, 1) === '#' && urlOptions.hash.startsWith(hash + '_submenu_') === false) {\n urlOptions.hash = hash;\n urlOptions.hashUpdate();\n }\n }\n });\n\n Ps.initialize(document.getElementById('sidebar'), {\n wheelSpeed: 0.5,\n wheelPropagation: true,\n swipePropagation: true,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n useBothWheelAxes: false,\n suppressScrollX: true,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n theme: 'default'\n });\n\n // ------------------------------------------------------------------------\n // scrollspy\n\n if (scrollspyOffset > 250) {\n scrollspyOffset = 250;\n }\n if (scrollspyOffset < 75) {\n scrollspyOffset = 75;\n }\n document.body.setAttribute('data-offset', scrollspyOffset);\n\n // scroll the dashboard, before activating the scrollspy, so that our\n // hash will not be updated before we got the chance to scroll to it\n scrollDashboardTo();\n\n $(document.body).scrollspy({\n target: '#sidebar',\n offset: scrollspyOffset // controls the diff of the <hX> element to the top, to select it\n });\n\n // ------------------------------------------------------------------------\n // my-netdata menu\n\n $('#deleteRegistryModal')\n .on('hidden.bs.modal', function () {\n deleteRegistryGuid = null;\n });\n\n // ------------------------------------------------------------------------\n // update modal\n\n $('#updateModal')\n .on('show.bs.modal', function () {\n versionLog('checking, please wait...');\n })\n .on('shown.bs.modal', function () {\n notifyForUpdate(true);\n });\n\n // ------------------------------------------------------------------------\n // alarms modal\n\n $('#alarmsModal')\n .on('shown.bs.modal', function () {\n alarmsUpdateModal();\n })\n .on('hidden.bs.modal', function () {\n document.getElementById('alarms_active').innerHTML =\n document.getElementById('alarms_all').innerHTML =\n document.getElementById('alarms_log').innerHTML =\n 'loading...';\n });\n\n // ------------------------------------------------------------------------\n\n dashboardSettingsSetup();\n loadSnapshotDragAndDropSetup();\n saveSnapshotModalSetup();\n showPageFooter();\n\n // ------------------------------------------------------------------------\n // https://github.com/viralpatel/jquery.shorten/blob/master/src/jquery.shorten.js\n\n $.fn.shorten = function (settings) {\n \"use strict\";\n\n var config = {\n showChars: 750,\n minHideChars: 10,\n ellipsesText: \"...\",\n moreText: '<i class=\"fas fa-expand\"></i> show more information',\n lessText: '<i class=\"fas fa-compress\"></i> show less information',\n onLess: function () {\n NETDATA.onscroll();\n },\n onMore: function () {\n NETDATA.onscroll();\n },\n errMsg: null,\n force: false\n };\n\n if (settings) {\n $.extend(config, settings);\n }\n\n if ($(this).data('jquery.shorten') && !config.force) {\n return false;\n }\n $(this).data('jquery.shorten', true);\n\n $(document).off(\"click\", '.morelink');\n\n $(document).on({\n click: function () {\n\n var $this = $(this);\n if ($this.hasClass('less')) {\n $this.removeClass('less');\n $this.html(config.moreText);\n $this.parent().prev().animate({ 'height': '0' + '%' }, 0, function () {\n $this.parent().prev().prev().show();\n }).hide(0, function () {\n config.onLess();\n });\n } else {\n $this.addClass('less');\n $this.html(config.lessText);\n $this.parent().prev().animate({ 'height': '100' + '%' }, 0, function () {\n $this.parent().prev().prev().hide();\n }).show(0, function () {\n config.onMore();\n });\n }\n return false;\n }\n }, '.morelink');\n\n return this.each(function () {\n var $this = $(this);\n\n var content = $this.html();\n var contentlen = $this.text().length;\n if (contentlen > config.showChars + config.minHideChars) {\n var c = content.substr(0, config.showChars);\n if (c.indexOf('<') >= 0) // If there's HTML don't want to cut it\n {\n var inTag = false; // I'm in a tag?\n var bag = ''; // Put the characters to be shown here\n var countChars = 0; // Current bag size\n var openTags = []; // Stack for opened tags, so I can close them later\n var tagName = null;\n\n for (var i = 0, r = 0; r <= config.showChars; i++) {\n if (content[i] === '<' && !inTag) {\n inTag = true;\n\n // This could be \"tag\" or \"/tag\"\n tagName = content.substring(i + 1, content.indexOf('>', i));\n\n // If its a closing tag\n if (tagName[0] === '/') {\n\n if (tagName !== ('/' + openTags[0])) {\n config.errMsg = 'ERROR en HTML: the top of the stack should be the tag that closes';\n } else {\n openTags.shift(); // Pops the last tag from the open tag stack (the tag is closed in the retult HTML!)\n }\n\n } else {\n // There are some nasty tags that don't have a close tag like <br/>\n if (tagName.toLowerCase() !== 'br') {\n openTags.unshift(tagName); // Add to start the name of the tag that opens\n }\n }\n }\n\n if (inTag && content[i] === '>') {\n inTag = false;\n }\n\n if (inTag) {\n bag += content.charAt(i);\n } else {\n // Add tag name chars to the result\n r++;\n if (countChars <= config.showChars) {\n bag += content.charAt(i); // Fix to ie 7 not allowing you to reference string characters using the []\n countChars++;\n } else {\n // Now I have the characters needed\n if (openTags.length > 0) {\n // I have unclosed tags\n\n for (var j = 0; j < openTags.length; j++) {\n bag += '</' + openTags[j] + '>'; // Close all tags that were opened\n\n // You could shift the tag from the stack to check if you end with an empty stack, that means you have closed all open tags\n }\n break;\n }\n }\n }\n }\n c = $('<div/>').html(bag + '<span class=\"ellip\">' + config.ellipsesText + '</span>').html();\n } else {\n c += config.ellipsesText;\n }\n\n var html = '<div class=\"shortcontent\">' + c +\n '</div><div class=\"allcontent\">' + content +\n '</div><span><a href=\"javascript://nop/\" class=\"morelink\">' + config.moreText + '</a></span>';\n\n $this.html(html);\n $this.find(\".allcontent\").hide(); // Hide all text\n $('.shortcontent p:last', $this).css('margin-bottom', 0); //Remove bottom margin on last paragraph as it's likely shortened\n }\n });\n };\n}\n\nfunction finalizePage() {\n if (urlOptions.after < 0) {\n reduxStore.dispatch(setDefaultAfterAction({ after: urlOptions.after }))\n } else if (urlOptions.pan_and_zoom === true) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: urlOptions.after,\n before: urlOptions.before,\n }))\n }\n\n // resize all charts - without starting the background thread\n // this has to be done while NETDATA is paused\n // if we ommit this, the affix menu will be wrong, since all\n // the Dom elements are initially zero-sized\n NETDATA.parseDom();\n\n // let it run (update the charts)\n NETDATA.unpause();\n\n runOnceOnDashboardWithjQuery();\n $(\".shorten\").shorten();\n enableTooltipsAndPopovers();\n\n if (isDemo) {\n // do not to give errors on netdata demo servers for 60 seconds\n NETDATA.options.current.retries_on_data_failures = 60;\n\n // google analytics when this is used for the home page of the demo sites\n // this does not run on user's installations\n setTimeout(function () {\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments)\n }, i[r].l = 1 * new Date();\n a = s.createElement(o),\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m)\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n\n ga('create', 'UA-64295674-3', 'auto');\n ga('send', 'pageview', '/demosite/' + window.location.host);\n }, 2000);\n } else {\n notifyForUpdate();\n }\n\n if (urlOptions.show_alarms === true) {\n setTimeout(function () {\n $('#alarmsModal').modal('show');\n }, 1000);\n }\n\n NETDATA.onresizeCallback = function () {\n Ps.update(document.getElementById('sidebar'));\n };\n NETDATA.onresizeCallback();\n\n if (window.netdataSnapshotData !== null) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: window.netdataSnapshotData.after_ms,\n before: window.netdataSnapshotData.before_ms,\n }))\n }\n}\n\nwindow.resetDashboardOptions = () => {\n reduxStore.dispatch(resetOptionsAction())\n\n // it's dirty, but this will be rewritten anyway\n urlOptions.update_always = false;\n urlOptions.help = false;\n urlOptions.theme = \"slate\";\n urlOptions.hashUpdate();\n\n netdataReload()\n}\n\n// callback to add the dashboard info to the\n// parallel javascript downloader in netdata\nexport const netdataPrepCallback = () => {\n if (isDemo) {\n document.getElementById('masthead').style.display = 'block';\n } else {\n if (urlOptions.update_always === true) {\n setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always);\n }\n }\n};\n\nwindow.selected_server_timezone = function (timezone, status) {\n // clear the error\n document.getElementById('timezone_error_message').innerHTML = '';\n\n if (typeof status === 'undefined') {\n // the user selected a timezone from the menu\n\n setOption('user_set_server_timezone', timezone);\n\n if (!isProperTimezone(timezone)) {\n setOption(\"timezone\", \"default\")\n\n if (!$('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('on');\n }\n\n document.getElementById('timezone_error_message').innerHTML = 'Ooops! That timezone was not accepted by your browser. Please open a github issue to help us fix it.';\n setOption('user_set_server_timezone', options.timezone);\n } else {\n if ($('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('off');\n }\n setOption(\"timezone\", timezone)\n }\n } else if (status === true) {\n // the user wants the browser default timezone to be activated\n setOption(\"timezone\", \"default\")\n } else {\n // the user wants the server default timezone to be activated\n\n let userSetServerTimezone = getOption(\"user_set_server_timezone\")\n if (userSetServerTimezone === 'default') {\n setOption(\"user_set_server_timezone\", options.timezone) // timezone from /charts endpoint\n userSetServerTimezone = options.timezone\n }\n\n if (!isProperTimezone(userSetServerTimezone)) {\n setOption(\"timezone\", \"default\");\n\n if (!$('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('on');\n }\n\n document.getElementById('timezone_error_message').innerHTML = 'Sorry. The timezone \"' + timezone.toString() + '\" is not accepted by your browser. Please select one from the list.';\n setOption('user_set_server_timezone', options.timezone);\n } else {\n setOption(\"timezone\", userSetServerTimezone)\n }\n }\n\n const timezoneOption = getOption(\"timezone\")\n document.getElementById('current_timezone').innerText = (timezoneOption === 'default') ? 'unset, using browser default' : timezoneOption;\n return false;\n};\n\nexport var netdataCallback = initializeDynamicDashboard;\n\nwindow.showSignInModal = function() {\n document.getElementById(\"sim-registry\").innerHTML = getFromRegistry(\"registryServer\");\n $(\"#signInModal\").modal(\"show\");\n}\n\nwindow.explicitlySignIn = () => {\n $(\"#signInModal\").modal(\"hide\");\n reduxStore.dispatch(explicitlySignInAction())\n};\n","import { AlarmStatus } from \"domains/global/types\"\n\nexport const storeKey = \"global\"\n\nexport const TEMPORARY_MAIN_JS_TIMEOUT = 1000\n\nexport const MASKED_DATA = \"***\"\n\nexport const NOTIFICATIONS_TIMEOUT = 5000\n\nexport const INFO_POLLING_FREQUENCY = 5000\n\nexport const CLOUD_BASE_URL_DISABLED = \"CLOUD_BASE_URL_DISABLED\"\n\nexport const alarmStatuses: AlarmStatus[] = [\"WARNING\", \"ERROR\", \"REMOVED\", \"UNDEFINED\", \"UNINITIALIZED\", \"CLEAR\", \"CRITICAL\"]\n","/* eslint-disable */\n/*!\n * d3pie\n * @author Ben Keen\n * @version 0.1.9\n * @date June 17th, 2015\n * @repo http://github.com/benkeen/d3pie\n * SPDX-License-Identifier: MIT\n */\n\n// UMD pattern from https://github.com/umdjs/umd/blob/master/returnExports.js\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module\n define([], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but only CommonJS-like environments that support module.exports,\n // like Node\n module.exports = factory();\n } else {\n // browser globals (root is window)\n root.d3pie = factory(root);\n }\n}(this, function() {\n\n var _scriptName = \"d3pie\";\n var _version = \"0.2.1\";\n\n // used to uniquely generate IDs and classes, ensuring no conflict between multiple pies on the same page\n var _uniqueIDCounter = 0;\n\n\n // this section includes all helper libs on the d3pie object. They're populated via grunt-template. Note: to keep\n // the syntax highlighting from getting all messed up, I commented out each line. That REQUIRES each of the files\n // to have an empty first line. Crumby, yes, but acceptable.\n //// --------- _default-settings.js -----------/**\n/**\n * Contains the out-the-box settings for the script. Any of these settings that aren't explicitly overridden for the\n * d3pie instance will inherit from these. This is also included on the main website for use in the generation script.\n */\nvar defaultSettings = {\n header: {\n title: {\n text: \"\",\n color: \"#333333\",\n fontSize: 18,\n fontWeight: \"bold\",\n font: \"arial\"\n },\n subtitle: {\n text: \"\",\n color: \"#666666\",\n fontSize: 14,\n fontWeight: \"bold\",\n font: \"arial\"\n },\n location: \"top-center\",\n titleSubtitlePadding: 8\n },\n footer: {\n text: \t \"\",\n color: \"#666666\",\n fontSize: 14,\n fontWeight: \"bold\",\n font: \"arial\",\n location: \"left\"\n },\n size: {\n canvasHeight: 500,\n canvasWidth: 500,\n pieInnerRadius: \"0%\",\n pieOuterRadius: null\n },\n data: {\n sortOrder: \"none\",\n ignoreSmallSegments: {\n enabled: false,\n valueType: \"percentage\",\n value: null\n },\n smallSegmentGrouping: {\n enabled: false,\n value: 1,\n valueType: \"percentage\",\n label: \"Other\",\n color: \"#cccccc\"\n },\n content: []\n },\n labels: {\n outer: {\n format: \"label\",\n hideWhenLessThanPercentage: null,\n pieDistance: 30\n },\n inner: {\n format: \"percentage\",\n hideWhenLessThanPercentage: null\n },\n mainLabel: {\n color: \"#333333\",\n font: \"arial\",\n fontWeight: \"normal\",\n fontSize: 10\n },\n percentage: {\n color: \"#dddddd\",\n font: \"arial\",\n fontWeight: \"bold\",\n fontSize: 10,\n decimalPlaces: 0\n },\n value: {\n color: \"#cccc44\",\n fontWeight: \"bold\",\n font: \"arial\",\n fontSize: 10\n },\n lines: {\n enabled: true,\n style: \"curved\",\n color: \"segment\"\n },\n truncation: {\n enabled: false,\n truncateLength: 30\n },\n formatter: null\n },\n effects: {\n load: {\n effect: \"none\", // \"default\", commented in the code\n speed: 1000\n },\n pullOutSegmentOnClick: {\n effect: \"none\", // \"bounce\", commented in the code\n speed: 300,\n size: 10\n },\n highlightSegmentOnMouseover: false,\n highlightLuminosity: -0.2\n },\n tooltips: {\n enabled: false,\n type: \"placeholder\", // caption|placeholder\n string: \"\",\n placeholderParser: null,\n styles: {\n fadeInSpeed: 250,\n backgroundColor: \"#000000\",\n backgroundOpacity: 0.5,\n color: \"#efefef\",\n borderRadius: 2,\n font: \"arial\",\n fontWeight: \"bold\",\n fontSize: 10,\n padding: 4\n }\n },\n misc: {\n colors: {\n background: null,\n segments: [\n \"#2484c1\", \"#65a620\", \"#7b6888\", \"#a05d56\", \"#961a1a\", \"#d8d23a\", \"#e98125\", \"#d0743c\", \"#635222\", \"#6ada6a\",\n \"#0c6197\", \"#7d9058\", \"#207f33\", \"#44b9b0\", \"#bca44a\", \"#e4a14b\", \"#a3acb2\", \"#8cc3e9\", \"#69a6f9\", \"#5b388f\",\n \"#546e91\", \"#8bde95\", \"#d2ab58\", \"#273c71\", \"#98bf6e\", \"#4daa4b\", \"#98abc5\", \"#cc1010\", \"#31383b\", \"#006391\",\n \"#c2643f\", \"#b0a474\", \"#a5a39c\", \"#a9c2bc\", \"#22af8c\", \"#7fcecf\", \"#987ac6\", \"#3d3b87\", \"#b77b1c\", \"#c9c2b6\",\n \"#807ece\", \"#8db27c\", \"#be66a2\", \"#9ed3c6\", \"#00644b\", \"#005064\", \"#77979f\", \"#77e079\", \"#9c73ab\", \"#1f79a7\"\n ],\n segmentStroke: \"#ffffff\"\n },\n gradient: {\n enabled: false,\n percentage: 95,\n color: \"#000000\"\n },\n canvasPadding: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5\n },\n pieCenterOffset: {\n x: 0,\n y: 0\n },\n cssPrefix: null\n },\n callbacks: {\n onload: null,\n onMouseoverSegment: null,\n onMouseoutSegment: null,\n onClickSegment: null\n }\n};\n\n //// --------- validate.js -----------\nvar validate = {\n\n // called whenever a new pie chart is created\n initialCheck: function(pie) {\n var cssPrefix = pie.cssPrefix;\n var element = pie.element;\n var options = pie.options;\n\n // confirm d3 is available [check minimum version]\n if (!window.d3 || !window.d3.hasOwnProperty(\"version\")) {\n console.error(\"d3pie error: d3 is not available\");\n return false;\n }\n\n // confirm element is either a DOM element or a valid string for a DOM element\n if (!(element instanceof HTMLElement || element instanceof SVGElement)) {\n console.error(\"d3pie error: the first d3pie() param must be a valid DOM element (not jQuery) or a ID string.\");\n return false;\n }\n\n // confirm the CSS prefix is valid. It has to start with a-Z and contain nothing but a-Z0-9_-\n if (!(/[a-zA-Z][a-zA-Z0-9_-]*$/.test(cssPrefix))) {\n console.error(\"d3pie error: invalid options.misc.cssPrefix\");\n return false;\n }\n\n // confirm some data has been supplied\n if (!helpers.isArray(options.data.content)) {\n console.error(\"d3pie error: invalid config structure: missing data.content property.\");\n return false;\n }\n if (options.data.content.length === 0) {\n console.error(\"d3pie error: no data supplied.\");\n return false;\n }\n\n // clear out any invalid data. Each data row needs a valid positive number and a label\n var data = [];\n for (var i=0; i<options.data.content.length; i++) {\n if (typeof options.data.content[i].value !== \"number\" || isNaN(options.data.content[i].value)) {\n console.log(\"not valid: \", options.data.content[i]);\n continue;\n }\n if (options.data.content[i].value <= 0) {\n console.log(\"not valid - should have positive value: \", options.data.content[i]);\n continue;\n }\n data.push(options.data.content[i]);\n }\n pie.options.data.content = data;\n\n // labels.outer.hideWhenLessThanPercentage - 1-100\n // labels.inner.hideWhenLessThanPercentage - 1-100\n\n return true;\n }\n};\n\n //// --------- helpers.js -----------\nvar helpers = {\n\n // creates the SVG element\n addSVGSpace: function(pie) {\n var element = pie.element;\n var canvasWidth = pie.options.size.canvasWidth;\n var canvasHeight = pie.options.size.canvasHeight;\n var backgroundColor = pie.options.misc.colors.background;\n\n var svg = d3.select(element).append(\"svg:svg\")\n .attr(\"width\", canvasWidth)\n .attr(\"height\", canvasHeight);\n\n if (backgroundColor !== \"transparent\") {\n svg.style(\"background-color\", function() { return backgroundColor; });\n }\n\n return svg;\n },\n\n shuffleArray: function(array) {\n var currentIndex = array.length, tmpVal, randomIndex;\n\n while (0 !== currentIndex) {\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // and swap it with the current element\n tmpVal = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = tmpVal;\n }\n return array;\n },\n\n processObj: function(obj, is, value) {\n if (typeof is === 'string') {\n return helpers.processObj(obj, is.split('.'), value);\n } else if (is.length === 1 && value !== undefined) {\n obj[is[0]] = value;\n return obj[is[0]];\n } else if (is.length === 0) {\n return obj;\n } else {\n return helpers.processObj(obj[is[0]], is.slice(1), value);\n }\n },\n\n getDimensions: function(el) {\n if(typeof el === 'string')\n el = document.getElementById(el);\n\n var w = 0, h = 0;\n if (el) {\n var dimensions = el.getBBox();\n w = dimensions.width;\n h = dimensions.height;\n }\n else {\n console.log(\"error: getDimensions() \" + id + \" not found.\");\n }\n\n return { w: w, h: h };\n },\n\n /**\n * This is based on the SVG coordinate system, where top-left is 0,0 and bottom right is n-n.\n * @param r1\n * @param r2\n * @returns {boolean}\n */\n rectIntersect: function(r1, r2) {\n var returnVal = (\n // r2.left > r1.right\n (r2.x > (r1.x + r1.w)) ||\n\n // r2.right < r1.left\n ((r2.x + r2.w) < r1.x) ||\n\n // r2.top < r1.bottom\n ((r2.y + r2.h) < r1.y) ||\n\n // r2.bottom > r1.top\n (r2.y > (r1.y + r1.h))\n );\n\n return !returnVal;\n },\n\n /**\n * Returns a lighter/darker shade of a hex value, based on a luminance value passed.\n * @param hex a hex color value such as “#abc” or “#123456″ (the hash is optional)\n * @param lum the luminosity factor: -0.1 is 10% darker, 0.2 is 20% lighter, etc.\n * @returns {string}\n */\n getColorShade: function(hex, lum) {\n\n // validate hex string\n hex = String(hex).replace(/[^0-9a-f]/gi, '');\n if (hex.length < 6) {\n hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n }\n lum = lum || 0;\n\n // convert to decimal and change luminosity\n var newHex = \"#\";\n for (var i=0; i<3; i++) {\n var c = parseInt(hex.substr(i * 2, 2), 16);\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n newHex += (\"00\" + c).substr(c.length);\n }\n\n return newHex;\n },\n\n /**\n * Users can choose to specify segment colors in three ways (in order of precedence):\n * \t1. include a \"color\" attribute for each row in data.content\n * \t2. include a misc.colors.segments property which contains an array of hex codes\n * \t3. specify nothing at all and rely on this lib provide some reasonable defaults\n *\n * This function sees what's included and populates this.options.colors with whatever's required\n * for this pie chart.\n * @param data\n */\n initSegmentColors: function(pie) {\n var data = pie.options.data.content;\n var colors = pie.options.misc.colors.segments;\n\n // TODO this needs a ton of error handling\n\n var finalColors = [];\n for (var i=0; i<data.length; i++) {\n if (data[i].hasOwnProperty(\"color\")) {\n finalColors.push(data[i].color);\n } else {\n finalColors.push(colors[i]);\n }\n }\n\n return finalColors;\n },\n\n applySmallSegmentGrouping: function(data, smallSegmentGrouping) {\n var totalSize;\n if (smallSegmentGrouping.valueType === \"percentage\") {\n totalSize = math.getTotalPieSize(data);\n }\n\n // loop through each data item\n var newData = [];\n var groupedData = [];\n var totalGroupedData = 0;\n for (var i=0; i<data.length; i++) {\n if (smallSegmentGrouping.valueType === \"percentage\") {\n var dataPercent = (data[i].value / totalSize) * 100;\n if (dataPercent <= smallSegmentGrouping.value) {\n groupedData.push(data[i]);\n totalGroupedData += data[i].value;\n continue;\n }\n data[i].isGrouped = false;\n newData.push(data[i]);\n } else {\n if (data[i].value <= smallSegmentGrouping.value) {\n groupedData.push(data[i]);\n totalGroupedData += data[i].value;\n continue;\n }\n data[i].isGrouped = false;\n newData.push(data[i]);\n }\n }\n\n // we're done! See if there's any small segment groups to add\n if (groupedData.length) {\n newData.push({\n color: smallSegmentGrouping.color,\n label: smallSegmentGrouping.label,\n value: totalGroupedData,\n isGrouped: true,\n groupedData: groupedData\n });\n }\n\n return newData;\n },\n\n // for debugging\n showPoint: function(svg, x, y) {\n svg.append(\"circle\").attr(\"cx\", x).attr(\"cy\", y).attr(\"r\", 2).style(\"fill\", \"black\");\n },\n\n isFunction: function(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n },\n\n isArray: function(o) {\n return Object.prototype.toString.call(o) === '[object Array]';\n }\n};\n\n\n// taken from jQuery\nvar extend = function() {\n var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false,\n toString = Object.prototype.toString,\n hasOwn = Object.prototype.hasOwnProperty,\n class2type = {\n \"[object Boolean]\": \"boolean\",\n \"[object Number]\": \"number\",\n \"[object String]\": \"string\",\n \"[object Function]\": \"function\",\n \"[object Array]\": \"array\",\n \"[object Date]\": \"date\",\n \"[object RegExp]\": \"regexp\",\n \"[object Object]\": \"object\"\n },\n\n jQuery = {\n isFunction: function (obj) {\n return jQuery.type(obj) === \"function\";\n },\n isArray: Array.isArray ||\n function (obj) {\n return jQuery.type(obj) === \"array\";\n },\n isWindow: function (obj) {\n return obj !== null && obj === obj.window;\n },\n isNumeric: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n type: function (obj) {\n return obj === null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n },\n isPlainObject: function (obj) {\n if (!obj || jQuery.type(obj) !== \"object\" || obj.nodeType) {\n return false;\n }\n try {\n if (obj.constructor && !hasOwn.call(obj, \"constructor\") && !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n return false;\n }\n } catch (e) {\n return false;\n }\n var key;\n for (key in obj) {}\n return key === undefined || hasOwn.call(obj, key);\n }\n };\n if (typeof target === \"boolean\") {\n deep = target;\n target = arguments[1] || {};\n i = 2;\n }\n if (typeof target !== \"object\" && !jQuery.isFunction(target)) {\n target = {};\n }\n if (length === i) {\n target = this;\n --i;\n }\n for (i; i < length; i++) {\n if ((options = arguments[i]) !== null) {\n for (name in options) {\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n // WARNING: RECURSION\n target[name] = extend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n};\n //// --------- math.js -----------\nvar math = {\n\n toRadians: function(degrees) {\n return degrees * (Math.PI / 180);\n },\n\n toDegrees: function(radians) {\n return radians * (180 / Math.PI);\n },\n\n computePieRadius: function(pie) {\n var size = pie.options.size;\n var canvasPadding = pie.options.misc.canvasPadding;\n\n // outer radius is either specified (e.g. through the generator), or omitted altogether\n // and calculated based on the canvas dimensions. Right now the estimated version isn't great - it should\n // be possible to calculate it to precisely generate the maximum sized pie, but it's fussy as heck. Something\n // for the next release.\n\n // first, calculate the default _outerRadius\n var w = size.canvasWidth - canvasPadding.left - canvasPadding.right;\n var h = size.canvasHeight - canvasPadding.top - canvasPadding.bottom;\n\n // now factor in the footer, title & subtitle\n if (pie.options.header.location !== \"pie-center\") {\n h -= pie.textComponents.headerHeight;\n }\n\n if (pie.textComponents.footer.exists) {\n h -= pie.textComponents.footer.h;\n }\n\n // for really teeny pies, h may be < 0. Adjust it back\n h = (h < 0) ? 0 : h;\n\n var outerRadius = ((w < h) ? w : h) / 3;\n var innerRadius, percent;\n\n // if the user specified something, use that instead\n if (size.pieOuterRadius !== null) {\n if (/%/.test(size.pieOuterRadius)) {\n percent = parseInt(size.pieOuterRadius.replace(/[\\D]/, \"\"), 10);\n percent = (percent > 99) ? 99 : percent;\n percent = (percent < 0) ? 0 : percent;\n\n var smallestDimension = (w < h) ? w : h;\n\n // now factor in the label line size\n if (pie.options.labels.outer.format !== \"none\") {\n var pieDistanceSpace = parseInt(pie.options.labels.outer.pieDistance, 10) * 2;\n if (smallestDimension - pieDistanceSpace > 0) {\n smallestDimension -= pieDistanceSpace;\n }\n }\n\n outerRadius = Math.floor((smallestDimension / 100) * percent) / 2;\n } else {\n outerRadius = parseInt(size.pieOuterRadius, 10);\n }\n }\n\n // inner radius\n if (/%/.test(size.pieInnerRadius)) {\n percent = parseInt(size.pieInnerRadius.replace(/[\\D]/, \"\"), 10);\n percent = (percent > 99) ? 99 : percent;\n percent = (percent < 0) ? 0 : percent;\n innerRadius = Math.floor((outerRadius / 100) * percent);\n } else {\n innerRadius = parseInt(size.pieInnerRadius, 10);\n }\n\n pie.innerRadius = innerRadius;\n pie.outerRadius = outerRadius;\n },\n\n getTotalPieSize: function(data) {\n var totalSize = 0;\n for (var i=0; i<data.length; i++) {\n totalSize += data[i].value;\n }\n return totalSize;\n },\n\n sortPieData: function(pie) {\n var data = pie.options.data.content;\n var sortOrder = pie.options.data.sortOrder;\n\n switch (sortOrder) {\n case \"none\":\n // do nothing\n break;\n case \"random\":\n data = helpers.shuffleArray(data);\n break;\n case \"value-asc\":\n data.sort(function(a, b) { return (a.value < b.value) ? -1 : 1; });\n break;\n case \"value-desc\":\n data.sort(function(a, b) { return (a.value < b.value) ? 1 : -1; });\n break;\n case \"label-asc\":\n data.sort(function(a, b) { return (a.label.toLowerCase() > b.label.toLowerCase()) ? 1 : -1; });\n break;\n case \"label-desc\":\n data.sort(function(a, b) { return (a.label.toLowerCase() < b.label.toLowerCase()) ? 1 : -1; });\n break;\n }\n\n return data;\n },\n\n // var pieCenter = math.getPieCenter();\n getPieTranslateCenter: function(pieCenter) {\n return \"translate(\" + pieCenter.x + \",\" + pieCenter.y + \")\";\n },\n\n /**\n * Used to determine where on the canvas the center of the pie chart should be. It takes into account the\n * height and position of the title, subtitle and footer, and the various paddings.\n * @private\n */\n calculatePieCenter: function(pie) {\n var pieCenterOffset = pie.options.misc.pieCenterOffset;\n var hasTopTitle = (pie.textComponents.title.exists && pie.options.header.location !== \"pie-center\");\n var hasTopSubtitle = (pie.textComponents.subtitle.exists && pie.options.header.location !== \"pie-center\");\n\n var headerOffset = pie.options.misc.canvasPadding.top;\n if (hasTopTitle && hasTopSubtitle) {\n headerOffset += pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n } else if (hasTopTitle) {\n headerOffset += pie.textComponents.title.h;\n } else if (hasTopSubtitle) {\n headerOffset += pie.textComponents.subtitle.h;\n }\n\n var footerOffset = 0;\n if (pie.textComponents.footer.exists) {\n footerOffset = pie.textComponents.footer.h + pie.options.misc.canvasPadding.bottom;\n }\n\n var x = ((pie.options.size.canvasWidth - pie.options.misc.canvasPadding.left - pie.options.misc.canvasPadding.right) / 2) + pie.options.misc.canvasPadding.left;\n var y = ((pie.options.size.canvasHeight - footerOffset - headerOffset) / 2) + headerOffset;\n\n x += pieCenterOffset.x;\n y += pieCenterOffset.y;\n\n pie.pieCenter = { x: x, y: y };\n },\n\n\n /**\n * Rotates a point (x, y) around an axis (xm, ym) by degrees (a).\n * @param x\n * @param y\n * @param xm\n * @param ym\n * @param a angle in degrees\n * @returns {Array}\n */\n rotate: function(x, y, xm, ym, a) {\n\n a = a * Math.PI / 180; // convert to radians\n\n var cos = Math.cos,\n sin = Math.sin,\n // subtract midpoints, so that midpoint is translated to origin and add it in the end again\n xr = (x - xm) * cos(a) - (y - ym) * sin(a) + xm,\n yr = (x - xm) * sin(a) + (y - ym) * cos(a) + ym;\n\n return { x: xr, y: yr };\n },\n\n /**\n * Translates a point x, y by distance d, and by angle a.\n * @param x\n * @param y\n * @param dist\n * @param a angle in degrees\n */\n translate: function(x, y, d, a) {\n var rads = math.toRadians(a);\n return {\n x: x + d * Math.sin(rads),\n y: y - d * Math.cos(rads)\n };\n },\n\n // from: http://stackoverflow.com/questions/19792552/d3-put-arc-labels-in-a-pie-chart-if-there-is-enough-space\n pointIsInArc: function(pt, ptData, d3Arc) {\n // Center of the arc is assumed to be 0,0\n // (pt.x, pt.y) are assumed to be relative to the center\n var r1 = d3Arc.innerRadius()(ptData), // Note: Using the innerRadius\n r2 = d3Arc.outerRadius()(ptData),\n theta1 = d3Arc.startAngle()(ptData),\n theta2 = d3Arc.endAngle()(ptData);\n\n var dist = pt.x * pt.x + pt.y * pt.y,\n angle = Math.atan2(pt.x, -pt.y); // Note: different coordinate system\n\n angle = (angle < 0) ? (angle + Math.PI * 2) : angle;\n\n return (r1 * r1 <= dist) && (dist <= r2 * r2) &&\n (theta1 <= angle) && (angle <= theta2);\n }\n};\n\n //// --------- labels.js -----------\nvar labels = {\n\n /**\n * Adds the labels to the pie chart, but doesn't position them. There are two locations for the\n * labels: inside (center) of the segments, or outside the segments on the edge.\n * @param section \"inner\" or \"outer\"\n * @param sectionDisplayType \"percentage\", \"value\", \"label\", \"label-value1\", etc.\n * @param pie\n */\n add: function(pie, section, sectionDisplayType) {\n var include = labels.getIncludes(sectionDisplayType);\n var settings = pie.options.labels;\n\n // group the label groups (label, percentage, value) into a single element for simpler positioning\n var outerLabel = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"labels-\" + section)\n .attr(\"class\", pie.cssPrefix + \"labels-\" + section);\n\n var labelGroup = pie.__labels[section] = outerLabel.selectAll(\".\" + pie.cssPrefix + \"labelGroup-\" + section)\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"labelGroup\" + i + \"-\" + section; })\n .attr(\"data-index\", function(d, i) { return i; })\n .attr(\"class\", pie.cssPrefix + \"labelGroup-\" + section)\n .style(\"opacity\", 0);\n\n var formatterContext = { section: section, sectionDisplayType: sectionDisplayType };\n\n // 1. Add the main label\n if (include.mainLabel) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentMainLabel\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentMainLabel-\" + section)\n .text(function(d, i) {\n var str = d.label;\n\n // if a custom formatter has been defined, pass it the raw label string - it can do whatever it wants with it.\n // we only apply truncation if it's not defined\n if (settings.formatter) {\n formatterContext.index = i;\n formatterContext.part = 'mainLabel';\n formatterContext.value = d.value;\n formatterContext.label = str;\n str = settings.formatter(formatterContext);\n } else if (settings.truncation.enabled && d.label.length > settings.truncation.truncateLength) {\n str = d.label.substring(0, settings.truncation.truncateLength) + \"...\";\n }\n return str;\n })\n .style(\"font-size\", settings.mainLabel.fontSize + \"px\")\n .style(\"font-family\", settings.mainLabel.font)\n .style(\"font-weight\", settings.mainLabel.fontWeight)\n .style(\"fill\", function(d, i) {\n return (settings.mainLabel.color === \"segment\") ? pie.options.colors[i] : settings.mainLabel.color;\n });\n }\n\n // 2. Add the percentage label\n if (include.percentage) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentPercentage\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentPercentage-\" + section)\n .text(function(d, i) {\n var percentage = d.percentage;\n if (settings.formatter) {\n formatterContext.index = i;\n formatterContext.part = \"percentage\";\n formatterContext.value = d.value;\n formatterContext.label = d.percentage;\n percentage = settings.formatter(formatterContext);\n } else {\n percentage += \"%\";\n }\n return percentage;\n })\n .style(\"font-size\", settings.percentage.fontSize + \"px\")\n .style(\"font-family\", settings.percentage.font)\n .style(\"font-weight\", settings.percentage.fontWeight)\n .style(\"fill\", settings.percentage.color);\n }\n\n // 3. Add the value label\n if (include.value) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentValue\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentValue-\" + section)\n .text(function(d, i) {\n formatterContext.index = i;\n formatterContext.part = \"value\";\n formatterContext.value = d.value;\n formatterContext.label = d.value;\n return settings.formatter ? settings.formatter(formatterContext, d.value) : d.value;\n })\n .style(\"font-size\", settings.value.fontSize + \"px\")\n .style(\"font-family\", settings.value.font)\n .style(\"font-weight\", settings.value.fontWeight)\n .style(\"fill\", settings.value.color);\n }\n },\n\n /**\n * @param section \"inner\" / \"outer\"\n */\n positionLabelElements: function(pie, section, sectionDisplayType) {\n labels[\"dimensions-\" + section] = [];\n\n // get the latest widths, heights\n var labelGroups = pie.__labels[section];\n labelGroups.each(function(d, i) {\n var mainLabel = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentMainLabel-\" + section);\n var percentage = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section);\n var value = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section);\n\n labels[\"dimensions-\" + section].push({\n mainLabel: (mainLabel.node() !== null) ? mainLabel.node().getBBox() : null,\n percentage: (percentage.node() !== null) ? percentage.node().getBBox() : null,\n value: (value.node() !== null) ? value.node().getBBox() : null\n });\n });\n\n var singleLinePad = 5;\n var dims = labels[\"dimensions-\" + section];\n switch (sectionDisplayType) {\n case \"label-value1\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n break;\n case \"label-value2\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n break;\n case \"label-percentage1\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n break;\n case \"label-percentage2\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n .attr(\"dx\", function(d, i) { return (dims[i].mainLabel.width / 2) - (dims[i].percentage.width / 2); })\n .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n break;\n }\n },\n\n computeLabelLinePositions: function(pie) {\n pie.lineCoordGroups = [];\n pie.__labels.outer\n .each(function(d, i) { return labels.computeLinePosition(pie, i); });\n },\n\n computeLinePosition: function(pie, i) {\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n var originCoords = math.rotate(pie.pieCenter.x, pie.pieCenter.y - pie.outerRadius, pie.pieCenter.x, pie.pieCenter.y, angle);\n var heightOffset = pie.outerLabelGroupData[i].h / 5; // TODO check\n var labelXMargin = 6; // the x-distance of the label from the end of the line [TODO configurable]\n\n var quarter = Math.floor(angle / 90);\n var midPoint = 4;\n var x2, y2, x3, y3;\n\n // this resolves an issue when the\n if (quarter === 2 && angle === 180) {\n quarter = 1;\n }\n\n switch (quarter) {\n case 0:\n x2 = pie.outerLabelGroupData[i].x - labelXMargin - ((pie.outerLabelGroupData[i].x - labelXMargin - originCoords.x) / 2);\n y2 = pie.outerLabelGroupData[i].y + ((originCoords.y - pie.outerLabelGroupData[i].y) / midPoint);\n x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 1:\n x2 = originCoords.x + (pie.outerLabelGroupData[i].x - originCoords.x) / midPoint;\n y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 2:\n var startOfLabelX = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n x2 = originCoords.x - (originCoords.x - startOfLabelX) / midPoint;\n y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 3:\n var startOfLabel = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n x2 = startOfLabel + ((originCoords.x - startOfLabel) / midPoint);\n y2 = pie.outerLabelGroupData[i].y + (originCoords.y - pie.outerLabelGroupData[i].y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n }\n\n /*\n * x1 / y1: the x/y coords of the start of the line, at the mid point of the segments arc on the pie circumference\n * x2 / y2: if \"curved\" line style is being used, this is the midpoint of the line. Other\n * x3 / y3: the end of the line; closest point to the label\n */\n if (pie.options.labels.lines.style === \"straight\") {\n pie.lineCoordGroups[i] = [\n { x: originCoords.x, y: originCoords.y },\n { x: x3, y: y3 }\n ];\n } else {\n pie.lineCoordGroups[i] = [\n { x: originCoords.x, y: originCoords.y },\n { x: x2, y: y2 },\n { x: x3, y: y3 }\n ];\n }\n },\n\n addLabelLines: function(pie) {\n var lineGroups = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"pieChart\") // meaning, BEFORE .pieChart\n .attr(\"class\", pie.cssPrefix + \"lineGroups\")\n .style(\"opacity\", 1);\n\n var lineGroup = lineGroups.selectAll(\".\" + pie.cssPrefix + \"lineGroup\")\n .data(pie.lineCoordGroups)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"lineGroup\");\n\n var lineFunction = d3.line()\n .curve(d3.curveBasis)\n .x(function(d) { return d.x; })\n .y(function(d) { return d.y; });\n\n lineGroup.append(\"path\")\n .attr(\"d\", lineFunction)\n .attr(\"stroke\", function(d, i) {\n return (pie.options.labels.lines.color === \"segment\") ? pie.options.colors[i] : pie.options.labels.lines.color;\n })\n .attr(\"stroke-width\", 1)\n .attr(\"fill\", \"none\")\n .style(\"opacity\", function(d, i) {\n var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n var isHidden = (percentage !== null && d.percentage < percentage) || pie.options.data.content[i].label === \"\";\n return isHidden ? 0 : 1;\n });\n },\n\n positionLabelGroups: function(pie, section) {\n if (pie.options.labels[section].format === \"none\")\n return;\n\n pie.__labels[section]\n .style(\"opacity\", function(d, i) {\n var percentage = pie.options.labels[section].hideWhenLessThanPercentage;\n return (percentage !== null && d.percentage < percentage) ? 0 : 1;\n })\n .attr(\"transform\", function(d, i) {\n var x, y;\n if (section === \"outer\") {\n x = pie.outerLabelGroupData[i].x;\n y = pie.outerLabelGroupData[i].y;\n } else {\n var pieCenterCopy = extend(true, {}, pie.pieCenter);\n\n // now recompute the \"center\" based on the current _innerRadius\n if (pie.innerRadius > 0) {\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n var newCoords = math.translate(pie.pieCenter.x, pie.pieCenter.y, pie.innerRadius, angle);\n pieCenterCopy.x = newCoords.x;\n pieCenterCopy.y = newCoords.y;\n }\n\n var dims = helpers.getDimensions(pie.cssPrefix + \"labelGroup\" + i + \"-inner\");\n var xOffset = dims.w / 2;\n var yOffset = dims.h / 4; // confusing! Why 4? should be 2, but it doesn't look right\n\n x = pieCenterCopy.x + (pie.lineCoordGroups[i][0].x - pieCenterCopy.x) / 1.8;\n y = pieCenterCopy.y + (pie.lineCoordGroups[i][0].y - pieCenterCopy.y) / 1.8;\n\n x = x - xOffset;\n y = y + yOffset;\n }\n\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n\n getIncludes: function(val) {\n var addMainLabel = false;\n var addValue = false;\n var addPercentage = false;\n\n switch (val) {\n case \"label\":\n addMainLabel = true;\n break;\n case \"value\":\n addValue = true;\n break;\n case \"percentage\":\n addPercentage = true;\n break;\n case \"label-value1\":\n case \"label-value2\":\n addMainLabel = true;\n addValue = true;\n break;\n case \"label-percentage1\":\n case \"label-percentage2\":\n addMainLabel = true;\n addPercentage = true;\n break;\n }\n return {\n mainLabel: addMainLabel,\n value: addValue,\n percentage: addPercentage\n };\n },\n\n\n /**\n * This does the heavy-lifting to compute the actual coordinates for the outer label groups. It does two things:\n * 1. Make a first pass and position them in the ideal positions, based on the pie sizes\n * 2. Do some basic collision avoidance.\n */\n computeOuterLabelCoords: function(pie) {\n\n // 1. figure out the ideal positions for the outer labels\n pie.__labels.outer\n .each(function(d, i) {\n return labels.getIdealOuterLabelPositions(pie, i);\n });\n\n // 2. now adjust those positions to try to accommodate conflicts\n labels.resolveOuterLabelCollisions(pie);\n },\n\n /**\n * This attempts to resolve label positioning collisions.\n */\n resolveOuterLabelCollisions: function(pie) {\n if (pie.options.labels.outer.format === \"none\") {\n return;\n }\n\n var size = pie.options.data.content.length;\n labels.checkConflict(pie, 0, \"clockwise\", size);\n labels.checkConflict(pie, size-1, \"anticlockwise\", size);\n },\n\n checkConflict: function(pie, currIndex, direction, size) {\n var i, curr;\n\n if (size <= 1) {\n return;\n }\n\n var currIndexHemisphere = pie.outerLabelGroupData[currIndex].hs;\n if (direction === \"clockwise\" && currIndexHemisphere !== \"right\") {\n return;\n }\n if (direction === \"anticlockwise\" && currIndexHemisphere !== \"left\") {\n return;\n }\n var nextIndex = (direction === \"clockwise\") ? currIndex+1 : currIndex-1;\n\n // this is the current label group being looked at. We KNOW it's positioned properly (the first item\n // is always correct)\n var currLabelGroup = pie.outerLabelGroupData[currIndex];\n\n // this one we don't know about. That's the one we're going to look at and move if necessary\n var examinedLabelGroup = pie.outerLabelGroupData[nextIndex];\n\n var info = {\n labelHeights: pie.outerLabelGroupData[0].h,\n center: pie.pieCenter,\n lineLength: (pie.outerRadius + pie.options.labels.outer.pieDistance),\n heightChange: pie.outerLabelGroupData[0].h + 1 // 1 = padding\n };\n\n // loop through *ALL* label groups examined so far to check for conflicts. This is because when they're\n // very tightly fitted, a later label group may still appear high up on the page\n if (direction === \"clockwise\") {\n i = 0;\n for (; i<=currIndex; i++) {\n curr = pie.outerLabelGroupData[i];\n\n // if there's a conflict with this label group, shift the label to be AFTER the last known\n // one that's been properly placed\n if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n break;\n }\n }\n } else {\n i = size - 1;\n for (; i >= currIndex; i--) {\n curr = pie.outerLabelGroupData[i];\n\n // if there's a conflict with this label group, shift the label to be AFTER the last known\n // one that's been properly placed\n if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n break;\n }\n }\n }\n labels.checkConflict(pie, nextIndex, direction, size);\n },\n\n isLabelHidden: function(pie, index) {\n var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n return (percentage !== null && d.percentage < percentage) || pie.options.data.content[index].label === \"\";\n },\n\n // does a little math to shift a label into a new position based on the last properly placed one\n adjustLabelPos: function(pie, nextIndex, lastCorrectlyPositionedLabel, info) {\n var xDiff, yDiff, newXPos, newYPos;\n newYPos = lastCorrectlyPositionedLabel.y + info.heightChange;\n yDiff = info.center.y - newYPos;\n\n if (Math.abs(info.lineLength) > Math.abs(yDiff)) {\n xDiff = Math.sqrt((info.lineLength * info.lineLength) - (yDiff * yDiff));\n } else {\n xDiff = Math.sqrt((yDiff * yDiff) - (info.lineLength * info.lineLength));\n }\n\n if (lastCorrectlyPositionedLabel.hs === \"right\") {\n newXPos = info.center.x + xDiff;\n } else {\n newXPos = info.center.x - xDiff - pie.outerLabelGroupData[nextIndex].w;\n }\n\n pie.outerLabelGroupData[nextIndex].x = newXPos;\n pie.outerLabelGroupData[nextIndex].y = newYPos;\n },\n\n /**\n * @param i 0-N where N is the dataset size - 1.\n */\n getIdealOuterLabelPositions: function(pie, i) {\n var labelGroupNode = pie.svg.select(\"#\" + pie.cssPrefix + \"labelGroup\" + i + \"-outer\").node();\n if (!labelGroupNode) return;\n\n var labelGroupDims = labelGroupNode.getBBox();\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n\n var originalX = pie.pieCenter.x;\n var originalY = pie.pieCenter.y - (pie.outerRadius + pie.options.labels.outer.pieDistance);\n var newCoords = math.rotate(originalX, originalY, pie.pieCenter.x, pie.pieCenter.y, angle);\n\n // if the label is on the left half of the pie, adjust the values\n var hemisphere = \"right\"; // hemisphere\n if (angle > 180) {\n newCoords.x -= (labelGroupDims.width + 8);\n hemisphere = \"left\";\n } else {\n newCoords.x += 8;\n }\n\n pie.outerLabelGroupData[i] = {\n x: newCoords.x,\n y: newCoords.y,\n w: labelGroupDims.width,\n h: labelGroupDims.height,\n hs: hemisphere\n };\n }\n};\n\n //// --------- segments.js -----------\nvar segments = {\n\n effectMap: {\n \"none\": d3.easeLinear,\n \"bounce\": d3.easeBounce,\n \"linear\": d3.easeLinear,\n \"sin\": d3.easeSin,\n \"elastic\": d3.easeElastic,\n \"back\": d3.easeBack,\n \"quad\": d3.easeQuad,\n \"circle\": d3.easeCircle,\n \"exp\": d3.easeExp\n },\n\n /**\n * Creates the pie chart segments and displays them according to the desired load effect.\n * @private\n */\n create: function(pie) {\n var pieCenter = pie.pieCenter;\n var colors = pie.options.colors;\n var loadEffects = pie.options.effects.load;\n var segmentStroke = pie.options.misc.colors.segmentStroke;\n\n // we insert the pie chart BEFORE the title, to ensure the title overlaps the pie\n var pieChartElement = pie.svg.insert(\"g\", \"#\" + pie.cssPrefix + \"title\")\n .attr(\"transform\", function() { return math.getPieTranslateCenter(pieCenter); })\n .attr(\"class\", pie.cssPrefix + \"pieChart\");\n\n var arc = d3.arc()\n .innerRadius(pie.innerRadius)\n .outerRadius(pie.outerRadius)\n .startAngle(0)\n .endAngle(function(d) {\n return (d.value / pie.totalSize) * 2 * Math.PI;\n });\n\n var g = pieChartElement.selectAll(\".\" + pie.cssPrefix + \"arc\")\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"arc\");\n\n // if we're not fading in the pie, just set the load speed to 0\n //var loadSpeed = loadEffects.speed;\n //if (loadEffects.effect === \"none\") {\n //\tloadSpeed = 0;\n //}\n\n g.append(\"path\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segment\" + i; })\n .attr(\"fill\", function(d, i) {\n var color = colors[i];\n if (pie.options.misc.gradient.enabled) {\n color = \"url(#\" + pie.cssPrefix + \"grad\" + i + \")\";\n }\n return color;\n })\n .style(\"stroke\", segmentStroke)\n .style(\"stroke-width\", 1)\n //.transition()\n //.ease(d3.easeCubicInOut)\n //.duration(loadSpeed)\n .attr(\"data-index\", function(d, i) { return i; })\n .attr(\"d\", arc);\n/*\n .attrTween(\"d\", function(b) {\n var i = d3.interpolate({ value: 0 }, b);\n return function(t) {\n var ret = pie.arc(i(t));\n console.log(ret);\n return ret;\n };\n });\n*/\n pie.svg.selectAll(\"g.\" + pie.cssPrefix + \"arc\")\n .attr(\"transform\",\n function(d, i) {\n var angle = 0;\n if (i > 0) {\n angle = segments.getSegmentAngle(i-1, pie.options.data.content, pie.totalSize);\n }\n return \"rotate(\" + angle + \")\";\n }\n );\n pie.arc = arc;\n },\n\n addGradients: function(pie) {\n var grads = pie.svg.append(\"defs\")\n .selectAll(\"radialGradient\")\n .data(pie.options.data.content)\n .enter().append(\"radialGradient\")\n .attr(\"gradientUnits\", \"userSpaceOnUse\")\n .attr(\"cx\", 0)\n .attr(\"cy\", 0)\n .attr(\"r\", \"120%\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"grad\" + i; });\n\n grads.append(\"stop\").attr(\"offset\", \"0%\").style(\"stop-color\", function(d, i) { return pie.options.colors[i]; });\n grads.append(\"stop\").attr(\"offset\", pie.options.misc.gradient.percentage + \"%\").style(\"stop-color\", pie.options.misc.gradient.color);\n },\n\n addSegmentEventHandlers: function(pie) {\n var arc = pie.svg.selectAll(\".\" + pie.cssPrefix + \"arc\");\n arc = arc.merge(pie.__labels.inner.merge(pie.__labels.outer));\n\n arc.on(\"click\", function() {\n var currentEl = d3.select(this);\n var segment;\n\n // mouseover works on both the segments AND the segment labels, hence the following\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n var index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onClickSegment, segment, isExpanded);\n if (pie.options.effects.pullOutSegmentOnClick.effect !== \"none\") {\n if (isExpanded) {\n segments.closeSegment(pie, segment.node());\n } else {\n segments.openSegment(pie, segment.node());\n }\n }\n });\n\n arc.on(\"mouseover\", function() {\n var currentEl = d3.select(this);\n var segment, index;\n\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n if (pie.options.effects.highlightSegmentOnMouseover) {\n index = segment.attr(\"data-index\");\n var segColor = pie.options.colors[index];\n segment.style(\"fill\", helpers.getColorShade(segColor, pie.options.effects.highlightLuminosity));\n }\n\n if (pie.options.tooltips.enabled) {\n index = segment.attr(\"data-index\");\n tt.showTooltip(pie, index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoverSegment, segment, isExpanded);\n });\n\n arc.on(\"mousemove\", function() {\n tt.moveTooltip(pie);\n });\n\n arc.on(\"mouseout\", function() {\n var currentEl = d3.select(this);\n var segment, index;\n\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n if (pie.options.effects.highlightSegmentOnMouseover) {\n index = segment.attr(\"data-index\");\n var color = pie.options.colors[index];\n if (pie.options.misc.gradient.enabled) {\n color = \"url(#\" + pie.cssPrefix + \"grad\" + index + \")\";\n }\n segment.style(\"fill\", color);\n }\n\n if (pie.options.tooltips.enabled) {\n index = segment.attr(\"data-index\");\n tt.hideTooltip(pie, index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoutSegment, segment, isExpanded);\n });\n },\n\n // helper function used to call the click, mouseover, mouseout segment callback functions\n onSegmentEvent: function(pie, func, segment, isExpanded) {\n if (!helpers.isFunction(func)) {\n return;\n }\n var index = parseInt(segment.attr(\"data-index\"), 10);\n func({\n segment: segment.node(),\n index: index,\n expanded: isExpanded,\n data: pie.options.data.content[index]\n });\n },\n\n openSegment: function(pie, segment) {\n if (pie.isOpeningSegment) {\n return;\n }\n pie.isOpeningSegment = true;\n\n segments.maybeCloseOpenSegment(pie);\n\n d3.select(segment)\n .transition()\n .ease(segments.effectMap[pie.options.effects.pullOutSegmentOnClick.effect])\n .duration(pie.options.effects.pullOutSegmentOnClick.speed)\n .attr(\"transform\", function(d, i) {\n var c = pie.arc.centroid(d),\n x = c[0],\n y = c[1],\n h = Math.sqrt(x*x + y*y),\n pullOutSize = parseInt(pie.options.effects.pullOutSegmentOnClick.size, 10);\n\n return \"translate(\" + ((x/h) * pullOutSize) + ',' + ((y/h) * pullOutSize) + \")\";\n })\n .on(\"end\", function(d, i) {\n pie.currentlyOpenSegment = segment;\n pie.isOpeningSegment = false;\n d3.select(segment).attr(\"class\", pie.cssPrefix + \"expanded\");\n });\n },\n\n maybeCloseOpenSegment: function(pie) {\n if (typeof pie !== 'undefined' && pie.svg.selectAll(\".\" + pie.cssPrefix + \"expanded\").size() > 0) {\n segments.closeSegment(pie, pie.svg.select(\".\" + pie.cssPrefix + \"expanded\").node());\n }\n },\n\n closeSegment: function(pie, segment) {\n d3.select(segment)\n .transition()\n .duration(400)\n .attr(\"transform\", \"translate(0,0)\")\n .on(\"end\", function(d, i) {\n d3.select(segment).attr(\"class\", \"\");\n pie.currentlyOpenSegment = null;\n });\n },\n\n getCentroid: function(el) {\n var bbox = el.getBBox();\n return {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n },\n\n /**\n * General helper function to return a segment's angle, in various different ways.\n * @param index\n * @param opts optional object for fine-tuning exactly what you want.\n */\n getSegmentAngle: function(index, data, totalSize, opts) {\n var options = extend({\n // if true, this returns the full angle from the origin. Otherwise it returns the single segment angle\n compounded: true,\n\n // optionally returns the midpoint of the angle instead of the full angle\n midpoint: false\n }, opts);\n\n var currValue = data[index].value;\n var fullValue;\n if (options.compounded) {\n fullValue = 0;\n\n // get all values up to and including the specified index\n for (var i=0; i<=index; i++) {\n fullValue += data[i].value;\n }\n }\n\n if (typeof fullValue === 'undefined') {\n fullValue = currValue;\n }\n\n // now convert the full value to an angle\n var angle = (fullValue / totalSize) * 360;\n\n // lastly, if we want the midpoint, factor that sucker in\n if (options.midpoint) {\n var currAngle = (currValue / totalSize) * 360;\n angle -= (currAngle / 2);\n }\n\n return angle;\n }\n\n};\n\n //// --------- text.js -----------\nvar text = {\n offscreenCoord: -10000,\n\n addTitle: function(pie) {\n pie.__title = pie.svg.selectAll(\".\" + pie.cssPrefix + \"title\")\n .data([pie.options.header.title])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"id\", pie.cssPrefix + \"title\")\n .attr(\"class\", pie.cssPrefix + \"title\")\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"text-anchor\", function() {\n var location;\n if (pie.options.header.location === \"top-center\" || pie.options.header.location === \"pie-center\") {\n location = \"middle\";\n } else {\n location = \"left\";\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionTitle: function(pie) {\n var textComponents = pie.textComponents;\n var headerLocation = pie.options.header.location;\n var canvasPadding = pie.options.misc.canvasPadding;\n var canvasWidth = pie.options.size.canvasWidth;\n var titleSubtitlePadding = pie.options.header.titleSubtitlePadding;\n\n var x;\n if (headerLocation === \"top-left\") {\n x = canvasPadding.left;\n } else {\n x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n }\n\n // add whatever offset has been added by user\n x += pie.options.misc.pieCenterOffset.x;\n\n var y = canvasPadding.top + textComponents.title.h;\n\n if (headerLocation === \"pie-center\") {\n y = pie.pieCenter.y;\n\n // still not fully correct\n if (textComponents.subtitle.exists) {\n var totalTitleHeight = textComponents.title.h + titleSubtitlePadding + textComponents.subtitle.h;\n y = y - (totalTitleHeight / 2) + textComponents.title.h;\n } else {\n y += (textComponents.title.h / 4);\n }\n }\n\n pie.__title\n .attr(\"x\", x)\n .attr(\"y\", y);\n },\n\n addSubtitle: function(pie) {\n var headerLocation = pie.options.header.location;\n\n pie.__subtitle = pie.svg.selectAll(\".\" + pie.cssPrefix + \"subtitle\")\n .data([pie.options.header.subtitle])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"id\", pie.cssPrefix + \"subtitle\")\n .attr(\"class\", pie.cssPrefix + \"subtitle\")\n .attr(\"text-anchor\", function() {\n var location;\n if (headerLocation === \"top-center\" || headerLocation === \"pie-center\") {\n location = \"middle\";\n } else {\n location = \"left\";\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionSubtitle: function(pie) {\n var canvasPadding = pie.options.misc.canvasPadding;\n var canvasWidth = pie.options.size.canvasWidth;\n\n var x;\n if (pie.options.header.location === \"top-left\") {\n x = canvasPadding.left;\n } else {\n x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n }\n\n // add whatever offset has been added by user\n x += pie.options.misc.pieCenterOffset.x;\n\n var y = text.getHeaderHeight(pie);\n\n pie.__subtitle\n .attr(\"x\", x)\n .attr(\"y\", y);\n },\n\n addFooter: function(pie) {\n pie.__footer = pie.svg.selectAll(\".\" + pie.cssPrefix + \"footer\")\n .data([pie.options.footer])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"id\", pie.cssPrefix + \"footer\")\n .attr(\"class\", pie.cssPrefix + \"footer\")\n .attr(\"text-anchor\", function() {\n var location = \"left\";\n if (pie.options.footer.location === \"bottom-center\") {\n location = \"middle\";\n } else if (pie.options.footer.location === \"bottom-right\") {\n location = \"left\"; // on purpose. We have to change the x-coord to make it properly right-aligned\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionFooter: function(pie) {\n var footerLocation = pie.options.footer.location;\n var footerWidth = pie.textComponents.footer.w;\n var canvasWidth = pie.options.size.canvasWidth;\n var canvasHeight = pie.options.size.canvasHeight;\n var canvasPadding = pie.options.misc.canvasPadding;\n\n var x;\n if (footerLocation === \"bottom-left\") {\n x = canvasPadding.left;\n } else if (footerLocation === \"bottom-right\") {\n x = canvasWidth - footerWidth - canvasPadding.right;\n } else {\n x = canvasWidth / 2; // TODO - shouldn't this also take into account padding?\n }\n\n pie.__footer\n .attr(\"x\", x)\n .attr(\"y\", canvasHeight - canvasPadding.bottom);\n },\n\n getHeaderHeight: function(pie) {\n var h;\n if (pie.textComponents.title.exists) {\n\n // if the subtitle isn't defined, it'll be set to 0\n var totalTitleHeight = pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n if (pie.options.header.location === \"pie-center\") {\n h = pie.pieCenter.y - (totalTitleHeight / 2) + totalTitleHeight;\n } else {\n h = totalTitleHeight + pie.options.misc.canvasPadding.top;\n }\n } else {\n if (pie.options.header.location === \"pie-center\") {\n var footerPlusPadding = pie.options.misc.canvasPadding.bottom + pie.textComponents.footer.h;\n h = ((pie.options.size.canvasHeight - footerPlusPadding) / 2) + pie.options.misc.canvasPadding.top + (pie.textComponents.subtitle.h / 2);\n } else {\n h = pie.options.misc.canvasPadding.top + pie.textComponents.subtitle.h;\n }\n }\n return h;\n }\n};\n\n //// --------- validate.js -----------\nvar tt = {\n addTooltips: function(pie) {\n\n // group the label groups (label, percentage, value) into a single element for simpler positioning\n var tooltips = pie.svg.insert(\"g\")\n .attr(\"class\", pie.cssPrefix + \"tooltips\");\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"tooltip\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"tooltip\" + i; })\n .style(\"opacity\", 0)\n .append(\"rect\")\n .attr(\"rx\", pie.options.tooltips.styles.borderRadius)\n .attr(\"ry\", pie.options.tooltips.styles.borderRadius)\n .attr(\"x\", -pie.options.tooltips.styles.padding)\n .attr(\"opacity\", pie.options.tooltips.styles.backgroundOpacity)\n .style(\"fill\", pie.options.tooltips.styles.backgroundColor);\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n .data(pie.options.data.content)\n .append(\"text\")\n .attr(\"fill\", function(d) { return pie.options.tooltips.styles.color; })\n .style(\"font-size\", function(d) { return pie.options.tooltips.styles.fontSize; })\n .style(\"font-weight\", function(d) { return pie.options.tooltips.styles.fontWeight; })\n .style(\"font-family\", function(d) { return pie.options.tooltips.styles.font; })\n .text(function(d, i) {\n var caption = pie.options.tooltips.string;\n if (pie.options.tooltips.type === \"caption\") {\n caption = d.caption;\n }\n return tt.replacePlaceholders(pie, caption, i, {\n label: d.label,\n value: d.value,\n percentage: d.percentage\n });\n });\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip rect\")\n .attr(\"width\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return dims.w + (2 * pie.options.tooltips.styles.padding);\n })\n .attr(\"height\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return dims.h + (2 * pie.options.tooltips.styles.padding);\n })\n .attr(\"y\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return -(dims.h / 2) + 1;\n });\n },\n\n showTooltip: function(pie, index) {\n var fadeInSpeed = pie.options.tooltips.styles.fadeInSpeed;\n if (tt.currentTooltip === index) {\n fadeInSpeed = 1;\n }\n\n tt.currentTooltip = index;\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n .transition()\n .duration(fadeInSpeed)\n .style(\"opacity\", function() { return 1; });\n\n tt.moveTooltip(pie);\n },\n\n moveTooltip: function(pie) {\n d3.selectAll(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n .attr(\"transform\", function(d) {\n var mouseCoords = d3.mouse(this.parentNode);\n var x = mouseCoords[0] + pie.options.tooltips.styles.padding + 2;\n var y = mouseCoords[1] - (2 * pie.options.tooltips.styles.padding) - 2;\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n hideTooltip: function(pie, index) {\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n .style(\"opacity\", function() { return 0; });\n\n // move the tooltip offscreen. This ensures that when the user next mouseovers the segment the hidden\n // element won't interfere\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n .attr(\"transform\", function(d, i) {\n // klutzy, but it accounts for tooltip padding which could push it onscreen\n var x = pie.options.size.canvasWidth + 1000;\n var y = pie.options.size.canvasHeight + 1000;\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n replacePlaceholders: function(pie, str, index, replacements) {\n\n // if the user has defined a placeholderParser function, call it before doing the replacements\n if (helpers.isFunction(pie.options.tooltips.placeholderParser)) {\n pie.options.tooltips.placeholderParser(index, replacements);\n }\n\n var replacer = function() {\n return function(match) {\n var placeholder = arguments[1];\n if (replacements.hasOwnProperty(placeholder)) {\n return replacements[arguments[1]];\n } else {\n return arguments[0];\n }\n };\n };\n return str.replace(/\\{(\\w+)\\}/g, replacer(replacements));\n }\n};\n\n\n // --------------------------------------------------------------------------------------------\n\n // our constructor\n var d3pie = function(element, options) {\n\n // element can be an ID or DOM element\n this.element = element;\n if (typeof element === \"string\") {\n var el = element.replace(/^#/, \"\"); // replace any jQuery-like ID hash char\n this.element = document.getElementById(el);\n }\n\n var opts = {};\n extend(true, opts, defaultSettings, options);\n this.options = opts;\n\n // if the user specified a custom CSS element prefix (ID, class), use it\n if (this.options.misc.cssPrefix !== null) {\n this.cssPrefix = this.options.misc.cssPrefix;\n } else {\n this.cssPrefix = \"p\" + _uniqueIDCounter + \"_\";\n _uniqueIDCounter++;\n }\n\n\n // now run some validation on the user-defined info\n if (!validate.initialCheck(this)) {\n return;\n }\n\n // add a data-role to the DOM node to let anyone know that it contains a d3pie instance, and the d3pie version\n d3.select(this.element).attr(_scriptName, _version);\n\n // things that are done once\n _setupData.call(this);\n _init.call(this);\n };\n\n d3pie.prototype.recreate = function() {\n // now run some validation on the user-defined info\n if (!validate.initialCheck(this)) {\n return;\n }\n\n _setupData.call(this);\n _init.call(this);\n };\n\n d3pie.prototype.redraw = function() {\n this.element.innerHTML = \"\";\n _init.call(this);\n };\n\n d3pie.prototype.destroy = function() {\n this.element.innerHTML = \"\"; // clear out the SVG\n d3.select(this.element).attr(_scriptName, null); // remove the data attr\n };\n\n /**\n * Returns all pertinent info about the current open info. Returns null if nothing's open, or if one is, an object of\n * the following form:\n * \t{\n * \t element: DOM NODE,\n * \t index: N,\n * \t data: {}\n * \t}\n */\n d3pie.prototype.getOpenSegment = function() {\n var segment = this.currentlyOpenSegment;\n if (segment !== null && typeof segment !== \"undefined\") {\n var index = parseInt(d3.select(segment).attr(\"data-index\"), 10);\n return {\n element: segment,\n index: index,\n data: this.options.data.content[index]\n };\n } else {\n return null;\n }\n };\n\n d3pie.prototype.openSegment = function(index) {\n index = parseInt(index, 10);\n if (index < 0 || index > this.options.data.content.length-1) {\n return;\n }\n segments.openSegment(this, d3.select(\"#\" + this.cssPrefix + \"segment\" + index).node());\n };\n\n d3pie.prototype.closeSegment = function() {\n segments.maybeCloseOpenSegment(this);\n };\n\n // this let's the user dynamically update aspects of the pie chart without causing a complete redraw. It\n // intelligently re-renders only the part of the pie that the user specifies. Some things cause a repaint, others\n // just redraw the single element\n d3pie.prototype.updateProp = function(propKey, value) {\n switch (propKey) {\n case \"header.title.text\":\n var oldVal = helpers.processObj(this.options, propKey);\n helpers.processObj(this.options, propKey, value);\n d3.select(\"#\" + this.cssPrefix + \"title\").html(value);\n if ((oldVal === \"\" && value !== \"\") || (oldVal !== \"\" && value === \"\")) {\n this.redraw();\n }\n break;\n\n case \"header.subtitle.text\":\n var oldValue = helpers.processObj(this.options, propKey);\n helpers.processObj(this.options, propKey, value);\n d3.select(\"#\" + this.cssPrefix + \"subtitle\").html(value);\n if ((oldValue === \"\" && value !== \"\") || (oldValue !== \"\" && value === \"\")) {\n this.redraw();\n }\n break;\n\n case \"callbacks.onload\":\n case \"callbacks.onMouseoverSegment\":\n case \"callbacks.onMouseoutSegment\":\n case \"callbacks.onClickSegment\":\n case \"effects.pullOutSegmentOnClick.effect\":\n case \"effects.pullOutSegmentOnClick.speed\":\n case \"effects.pullOutSegmentOnClick.size\":\n case \"effects.highlightSegmentOnMouseover\":\n case \"effects.highlightLuminosity\":\n helpers.processObj(this.options, propKey, value);\n break;\n\n // everything else, attempt to update it & do a repaint\n default:\n helpers.processObj(this.options, propKey, value);\n\n this.destroy();\n this.recreate();\n break;\n }\n };\n\n\n // ------------------------------------------------------------------------------------------------\n\n var _setupData = function () {\n this.options.data.content = math.sortPieData(this);\n if (this.options.data.smallSegmentGrouping.enabled) {\n this.options.data.content = helpers.applySmallSegmentGrouping(this.options.data.content, this.options.data.smallSegmentGrouping);\n }\n\n\n this.options.colors = helpers.initSegmentColors(this);\n this.totalSize = math.getTotalPieSize(this.options.data.content);\n\n var dp = this.options.labels.percentage.decimalPlaces;\n\n // add in percentage data to content\n for (var i=0; i<this.options.data.content.length; i++) {\n this.options.data.content[i].percentage = _getPercentage(this.options.data.content[i].value, this.totalSize, dp);\n }\n\n // adjust the final item to ensure the percentage always adds up to precisely 100%. This is necessary\n var totalPercentage = 0;\n for (var j=0; j<this.options.data.content.length; j++) {\n if (j === this.options.data.content.length - 1) {\n this.options.data.content[j].percentage = (100 - totalPercentage).toFixed(dp);\n }\n totalPercentage += parseFloat(this.options.data.content[j].percentage);\n }\n };\n\n var _init = function() {\n\n // prep-work\n this.svg = helpers.addSVGSpace(this);\n\n // store info about the main text components as part of the d3pie object instance\n this.textComponents = {\n headerHeight: 0,\n title: {\n exists: this.options.header.title.text !== \"\",\n h: 0,\n w: 0\n },\n subtitle: {\n exists: this.options.header.subtitle.text !== \"\",\n h: 0,\n w: 0\n },\n footer: {\n exists: this.options.footer.text !== \"\",\n h: 0,\n w: 0\n }\n };\n\n this.outerLabelGroupData = [];\n\n // add the key text components offscreen (title, subtitle, footer). We need to know their widths/heights for later computation\n if (this.textComponents.title.exists) text.addTitle(this);\n if (this.textComponents.subtitle.exists) text.addSubtitle(this);\n text.addFooter(this);\n\n // console.log(this);\n\n // the footer never moves. Put it in place now\n var self = this;\n text.positionFooter(self);\n var d3 = helpers.getDimensions(self.__footer.node());\n self.textComponents.footer.h = d3.h;\n self.textComponents.footer.w = d3.w;\n\n if (self.textComponents.title.exists) {\n var d1 = helpers.getDimensions(self.__title.node());\n self.textComponents.title.h = d1.h;\n self.textComponents.title.w = d1.w;\n }\n\n if (self.textComponents.subtitle.exists) {\n var d2 = helpers.getDimensions(self.__subtitle.node());\n self.textComponents.subtitle.h = d2.h;\n self.textComponents.subtitle.w = d2.w;\n }\n\n // now compute the full header height\n if (self.textComponents.title.exists || self.textComponents.subtitle.exists) {\n var headerHeight = 0;\n if (self.textComponents.title.exists) {\n headerHeight += self.textComponents.title.h;\n if (self.textComponents.subtitle.exists) {\n headerHeight += self.options.header.titleSubtitlePadding;\n }\n }\n if (self.textComponents.subtitle.exists) {\n headerHeight += self.textComponents.subtitle.h;\n }\n self.textComponents.headerHeight = headerHeight;\n }\n\n // at this point, all main text component dimensions have been calculated\n math.computePieRadius(self);\n\n // this value is used all over the place for placing things and calculating locations. We figure it out ONCE\n // and store it as part of the object\n math.calculatePieCenter(self);\n\n // position the title and subtitle\n text.positionTitle(self);\n text.positionSubtitle(self);\n\n // now create the pie chart segments, and gradients if the user desired\n if (self.options.misc.gradient.enabled) {\n segments.addGradients(self);\n }\n segments.create(self); // also creates this.arc\n\n self.__labels = {};\n labels.add(self, \"inner\", self.options.labels.inner.format);\n labels.add(self, \"outer\", self.options.labels.outer.format);\n\n // position the label elements relatively within their individual group (label, percentage, value)\n labels.positionLabelElements(self, \"inner\", self.options.labels.inner.format);\n labels.positionLabelElements(self, \"outer\", self.options.labels.outer.format);\n labels.computeOuterLabelCoords(self);\n\n // this is (and should be) dumb. It just places the outer groups at their calculated, collision-free positions\n labels.positionLabelGroups(self, \"outer\");\n\n // we use the label line positions for many other calculations, so ALWAYS compute them\n labels.computeLabelLinePositions(self);\n\n // only add them if they're actually enabled\n if (self.options.labels.lines.enabled && self.options.labels.outer.format !== \"none\") {\n labels.addLabelLines(self);\n }\n\n labels.positionLabelGroups(self, \"inner\");\n\n if (helpers.isFunction(self.options.callbacks.onload)) {\n try {\n self.options.callbacks.onload();\n } catch (e) { }\n }\n\n // add and position the tooltips\n if (self.options.tooltips.enabled) {\n tt.addTooltips(self);\n }\n\n segments.addSegmentEventHandlers(self);\n };\n\n var _getPercentage = function(value, total, decimalPlaces) {\n var relativeAmount = value / total;\n if (decimalPlaces <= 0) {\n return Math.round(relativeAmount * 100);\n } else {\n return (relativeAmount * 100).toFixed(decimalPlaces);\n }\n };\n\n return d3pie;\n}));\n","import { equals } from \"ramda\"\n\n// we use numbers to specify time. it can be either a timestamp (ms), or a relative value in seconds\n// which is always 0 or less (0 is now, -300 is -5 minutes)\n\nexport const isTimestamp = (x: number) => x > 0\n\nexport const NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const MS_IN_SECOND = 1000\nexport const NODE_VIEW_DYGRAPH_TITLE_HEIGHT = 30\nexport const DEFAULT_DASHBOARD_DURATION = 5 * 60\n\nexport const getIframeSrc = (cloudBaseURL: string, path: string) => `${cloudBaseURL}/sso/v2/${path}`\nexport const utmUrlSuffix = \"&utm_source=agent&utm_medium=web\"\n\nexport const getInitialAfterFromWindow = () => {\n const div = document.getElementById(\"charts_div\")\n if (!div) {\n // eslint-disable-next-line no-console\n console.error(\"Couldn't find '.charts_div' element to calculate width\")\n return -900\n }\n // based on https://github.com/netdata/dashboard/blob/7a7b538b00f1c5a4e1550f69cb5333212bb68f95/src/main.js#L1753\n // eslint-disable-next-line max-len\n // var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60;\n return -Math.round((div.getBoundingClientRect().width / 3) / 60) * 60\n}\n\nexport const SPACE_PANEL_STATE = \"space-panel-state\"\n\nexport const useNewKeysOnlyIfDifferent = <T extends {}>(\n keys: (keyof T)[], obj1: T | null, obj2: T,\n): T => {\n if (!obj1) {\n return obj2\n }\n return keys.reduce<T>((acc, key) => ({\n ...acc,\n [key]: equals(obj1[key], obj2![key]) ? obj1[key] : obj2[key],\n }), obj2)\n}\n","import {\n concat, cond, equals, identity, last, pipe, T,\n} from \"ramda\"\n\nimport { isDevelopmentEnv, isMainJs, isTestingEnv } from \"utils/env\"\n\n\n// this part needs to be static and should run immediately because otherwise document.currentScript\n// will be null\nconst currentScript = isTestingEnv\n ? { src: \"http://localhost:3000/some-script.js\" } // test env doesnt have document.currentScript\n : document.currentScript\n\nconst getScriptSource = () => {\n // logic based on old dashboard\n\n // http://stackoverflow.com/questions/984510/what-is-my-script-src-url\n // http://stackoverflow.com/questions/6941533/get-protocol-domain-and-port-from-url\n const script = cond([\n [Boolean, identity],\n // \"last\" typings don't work well with HTMLScriptElement\n // if document.currentScript is not available\n [T, () => last(document.getElementsByTagName(\"script\") as unknown as [HTMLScriptElement])],\n ])(currentScript)\n\n return script.src\n}\n\nexport const getPathFromScriptSource = (source: string) => {\n // match strings not containing slash, ending with `.js`, with optional suffix started by `?`\n const jsFilenameRegex = \"[^\\\\/]*\\\\.js(\\\\/?.*)?$\"\n const staticJsPath = \"/static/js\"\n return source.replace(new RegExp(jsFilenameRegex), \"\")\n .replace(staticJsPath, \"\")\n}\n\nconst getDefaultServer = () => {\n if (isDevelopmentEnv) {\n return \"http://localhost:19999\"\n }\n\n // Agent Dashboard does not need sophisticated server-detection, which is causing problems\n // when navigating through streamed nodes. Let's overwrite that setting\n if (isMainJs) {\n const pathname = window.location.pathname\n .replace(\"index.html\", \"\")\n // todo consider .replace(/[^\\/]*\\.html/, \"\") (every .html file in the url)\n .replace(\"default.html\", \"\") // for netdata demo servers\n return window.location.origin + pathname\n }\n\n const source = getScriptSource()\n return getPathFromScriptSource(source)\n}\n\n// append \"/\" at the end, if it's not already there\nexport const alwaysEndWithSlash = cond([\n [pipe(last, equals(\"/\")), identity],\n [T, (x: string) => concat(x, \"/\")], // R.__ typings don't work well\n])\n\nexport const serverDefault: string = alwaysEndWithSlash(\n window.netdataServer || getDefaultServer(),\n)\n\nexport const serverStatic: string = isDevelopmentEnv\n ? \"/\" // for localhost:3000/css/...\n : alwaysEndWithSlash(getDefaultServer()) // by default, load from netdata server\n","import { prop } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { selectChartMetadataFromChartsCall } from \"domains/global/selectors\"\n\nimport { ChartState } from \"./chart-types\"\nimport { initialSingleState } from \"./reducer\"\nimport { storeKey } from \"./constants\"\n\nexport const selectChartsState = (state: AppStateT) => state[storeKey]\nexport const selectSingleChartState = createSelector(\n selectChartsState,\n (_: unknown, { id }: { chartId?: string, id: string }) => id,\n (chartsState, id) => chartsState[id] || initialSingleState,\n)\n\nexport const selectChartData = createSelector(\n selectSingleChartState,\n (chartState) => chartState.chartData,\n)\n\nconst selectChartMetadataFromExplicitCall = createSelector(\n selectSingleChartState, prop(\"chartMetadata\"),\n)\n// dashboard.js normally fetches metadata for every individual charts, but we can prevent it\n// if metadata for ALL charts will be present in state.global (from single call)\nconst selectChartMetadata = createSelector(\n selectChartMetadataFromChartsCall,\n selectChartMetadataFromExplicitCall,\n (metadataFromAll, metadataFromSingleCall) => metadataFromAll || metadataFromSingleCall,\n)\nconst selectIsFetchingDetails = createSelector(selectSingleChartState, prop(\"isFetchingDetails\"))\n\nexport const makeSelectChartMetadataRequest = () => createSelector(\n selectChartMetadata,\n selectIsFetchingDetails,\n (chartMetadata, isFetchingDetails) => ({ chartMetadata, isFetchingDetails }),\n)\n\nexport const selectChartViewRange = createSelector(\n selectSingleChartState,\n (chartState) => chartState.viewRange,\n)\n\nexport const selectChartIsFetchingData = createSelector(\n selectSingleChartState,\n (chartState) => chartState.isFetchingData,\n)\n\nexport const selectChartFetchDataParams = createSelector(\n selectSingleChartState,\n (chartState) => chartState.fetchDataParams,\n)\n\nexport const selectResizeHeight = createSelector(\n selectSingleChartState,\n (chartState) => chartState.resizeHeight,\n)\n\nexport const selectChartPanAndZoom = createSelector(selectSingleChartState, prop(\"chartPanAndZoom\"))\n\n// count the nr of \"success\" or \"failure\" charts\nconst hasCompletedFetching = (chartState: ChartState) => chartState.isFetchDataFailure\n || Boolean(chartState.chartData) || chartState.isFetchDetailsFailure\n\nexport const selectChartsAreFetching = createSelector(selectChartsState, chartsState =>\n Object.values(chartsState).some(({ isFetchingData }) => isFetchingData)\n)\n\nexport const selectAmountOfFetchedCharts = createSelector(\n selectChartsState,\n (chartsState) => Object.values(chartsState)\n .reduce((acc, chartState) => acc + (hasCompletedFetching(chartState) ? 1 : 0), 0),\n)\n\nexport const selectAmountOfCharts = createSelector(\n selectChartsState,\n (chartsState) => Object.keys(chartsState).length,\n)\n\nexport const selectNameOfAnyFetchingChart = createSelector(\n selectChartsState,\n (chartsState) => Object.values(chartsState)\n .find((chartState) => chartState.isFetchingData)?.chartId,\n)\n\nexport const selectAmountOfSnapshotsFetched = createSelector(\n selectChartsState,\n (chartsState) => Object.values(chartsState)\n .reduce((acc, chartState) => acc + (chartState.snapshotData ? 1 : 0), 0),\n)\n\nexport const selectAmountOfSnapshotsFailed = createSelector(\n selectChartsState,\n (chartsState) => Object.values(chartsState)\n .reduce((acc, chartState) => acc + (chartState.snapshotDataIsError ? 1 : 0), 0),\n)\n","import { useMemo } from \"react\"\nimport moment from \"moment\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTimezoneSetting, selectUTCOffsetSetting } from \"domains/global/selectors\"\n\nconst zeropad = x => {\n if (x > -10 && x < 10) {\n return `0${x.toString()}`\n }\n return x.toString()\n}\n\nexport const isSupportingDateTimeFormat = !!(Intl && Intl.DateTimeFormat && navigator.language)\n\nconst narrowToDate = d => (typeof d === \"number\" ? new Date(d) : d)\n// these are the old netdata functions\n// we fallback to these, if the new ones fail\nexport const localeDateStringNative = d => narrowToDate(d).toLocaleDateString()\nexport const localeTimeStringNative = d => narrowToDate(d).toLocaleTimeString()\nexport const xAxisTimeStringNative = d => {\n const date = narrowToDate(d)\n return `${zeropad(date.getHours())}:${zeropad(date.getMinutes())}:${zeropad(date.getSeconds())}`\n}\n\nexport const isProperTimezone = timeZone => {\n try {\n Intl.DateTimeFormat(navigator.language, {\n localeMatcher: \"best fit\",\n formatMatcher: \"best fit\",\n weekday: \"short\",\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n timeZone,\n })\n } catch (e) {\n return false\n }\n return true\n}\n\nexport const getDateWithOffset = (date, offset) => moment(date).utcOffset(offset)\n\nconst getOptions = ({ long, isTime, secs, timezone }) => ({\n hourCycle: \"h23\",\n ...(isTime\n ? {}\n : long\n ? { weekday: \"short\", year: \"numeric\", month: \"short\", day: \"2-digit\" }\n : { dateStyle: \"short\" }),\n ...(isTime && {\n timeStyle: secs ? \"medium\" : \"short\",\n }),\n timeZone: timezone,\n})\n\nconst dateFormat = (date, { locale, ...options }) =>\n new Intl.DateTimeFormat(locale ?? navigator.language, getOptions(options)).format(date)\n\nconst getTimezone = timezone => (timezone !== \"\" && timezone !== \"default\" ? timezone : undefined)\n\nexport const useDateTime = () => {\n const timezone = useSelector(selectTimezoneSetting)\n const utcOffset = useSelector(selectUTCOffsetSetting)\n\n const localeDateString = useMemo(() => {\n return isSupportingDateTimeFormat\n ? (date, options) =>\n dateFormat(date, { long: true, timezone: getTimezone(timezone), ...options })\n : localeDateStringNative\n }, [timezone])\n\n const localeTimeString = useMemo(() => {\n return isSupportingDateTimeFormat\n ? (date, options) =>\n dateFormat(date, {\n secs: true,\n isTime: true,\n timezone: getTimezone(timezone),\n ...options,\n })\n : localeTimeStringNative\n }, [timezone])\n\n const xAxisTimeString = useMemo(() => {\n return isSupportingDateTimeFormat\n ? date => dateFormat(date, { secs: true, isTime: true, timezone: getTimezone(timezone) })\n : xAxisTimeStringNative\n }, [timezone])\n\n const xAxisDateString = useMemo(() => {\n return isSupportingDateTimeFormat\n ? date => dateFormat(date, { long: true, timezone: getTimezone(timezone) })\n : xAxisTimeStringNative\n }, [timezone])\n\n return {\n localeDateString,\n localeTimeString,\n xAxisDateString,\n xAxisTimeString,\n utcOffset,\n }\n}\n","import { createAction } from \"redux-act\"\nimport { ChartsMetadata } from \"domains/global/types\"\n\nimport { storeKey } from \"./constants\"\n\nexport interface startSnapshotModeAction {\n charts: ChartsMetadata\n dataPoints: number\n}\nexport const startSnapshotModeAction = createAction<startSnapshotModeAction>(\n `${storeKey}/isSnapshotModeAction`,\n)\n\nexport const stopSnapshotModeAction = createAction(`${storeKey}/stopSnapshotModeAction`)\n\nexport interface ShowSignInModalAction { signInLinkHref: string }\nexport const showSignInModalAction = createAction<ShowSignInModalAction>(\n `${storeKey}/showSignInModal`,\n)\n\nexport const explicitlySignInAction = createAction(`${storeKey}/explicitlySignIn`)\n\nexport interface IsSignedInAction { isSignedIn: boolean }\nexport const isSignedInAction = createAction<IsSignedInAction>(`${storeKey}/isSignedInAction`)\n\nexport interface SetOfflineAction { offline: boolean }\nexport const setOfflineAction = createAction<SetOfflineAction>(`${storeKey}/setOfflineAction`)\n","export const storeKey = \"chart\"\n\nexport const fallbackUpdateTimeInterval = 2000\n\n// corresponds to force_update_at in old dashboard\n// throttle time between use globalPanAndZoom change actions - and requests sent to server\nexport const panAndZoomDelay = 300\n","export const seconds4human = (\n totalSeconds: number | string, overrideOptions?: {[key: string]: string},\n) => {\n const defaultOptions: {[key: string]: string} = {\n now: \"now\",\n space: \" \",\n negative_suffix: \"ago\",\n day: \"day\",\n days: \"days\",\n hour: \"hour\",\n hours: \"hours\",\n minute: \"min\",\n minutes: \"mins\",\n second: \"sec\",\n seconds: \"secs\",\n and: \"and\",\n }\n\n const options = typeof overrideOptions === \"object\"\n ? { ...defaultOptions, ...overrideOptions }\n : defaultOptions\n\n let seconds = typeof totalSeconds === \"string\"\n ? parseInt(totalSeconds, 10)\n : totalSeconds\n\n if (seconds === 0) {\n return options.now\n }\n\n let suffix = \"\"\n if (seconds < 0) {\n seconds = -seconds\n if (options.negative_suffix !== \"\") {\n suffix = options.space + options.negative_suffix\n }\n }\n\n const days = Math.floor(seconds / 86400)\n seconds -= (days * 86400)\n\n const hours = Math.floor(seconds / 3600)\n seconds -= (hours * 3600)\n\n const minutes = Math.floor(seconds / 60)\n seconds -= (minutes * 60)\n\n const strings = []\n\n if (days > 1) {\n strings.push(days.toString() + options.space + options.days)\n } else if (days === 1) {\n strings.push(days.toString() + options.space + options.day)\n }\n\n if (hours > 1) {\n strings.push(hours.toString() + options.space + options.hours)\n } else if (hours === 1) {\n strings.push(hours.toString() + options.space + options.hour)\n }\n\n if (minutes > 1) {\n strings.push(minutes.toString() + options.space + options.minutes)\n } else if (minutes === 1) {\n strings.push(minutes.toString() + options.space + options.minute)\n }\n\n if (seconds > 1) {\n strings.push(Math.floor(seconds).toString() + options.space + options.seconds)\n } else if (seconds === 1) {\n strings.push(Math.floor(seconds).toString() + options.space + options.second)\n }\n\n if (strings.length === 1) {\n return strings.pop() + suffix\n }\n\n const last = strings.pop()\n return `${strings.join(\", \")} ${options.and} ${last}${suffix}`\n}\n","import { createReducer } from \"redux-act\"\n\nimport { ChartsMetadata } from \"domains/global/types\"\n\nimport { startSnapshotModeAction, stopSnapshotModeAction, isSignedInAction, setOfflineAction } from \"./actions\"\n\nexport type StateT = {\n isSnapshotMode: boolean\n snapshotCharts: ChartsMetadata | null\n snapshotDataPoints: number | null\n isSignedIn: boolean\n offline: boolean\n}\n\nexport const initialState: StateT = {\n isSnapshotMode: false,\n snapshotCharts: null,\n snapshotDataPoints: null,\n isSignedIn: false,\n offline: false\n}\n\nexport const dashboardReducer = createReducer<StateT>({}, initialState)\n\ndashboardReducer.on(startSnapshotModeAction, (state, { charts, dataPoints }) => ({\n ...state,\n snapshotCharts: charts, // todo integrate with /charts result\n snapshotDataPoints: dataPoints,\n isSnapshotMode: true,\n}))\n\ndashboardReducer.on(stopSnapshotModeAction, (state) => ({\n ...state,\n isSnapshotMode: initialState.isSnapshotMode,\n snapshotCharts: initialState.snapshotCharts,\n snapshotDataPoints: initialState.snapshotDataPoints,\n}))\n\ndashboardReducer.on(isSignedInAction, (state, { isSignedIn }) => ({\n ...state,\n isSignedIn\n}))\n\ndashboardReducer.on(setOfflineAction, (state, { offline }) => ({\n ...state,\n offline\n}))\n","import { combineReducers } from \"redux\"\n\nimport { globalReducer } from \"domains/global/reducer\"\nimport { storeKey as globalKey } from \"domains/global/constants\"\n\nimport { chartReducer } from \"domains/chart/reducer\"\nimport { storeKey as chartKey } from \"domains/chart/constants\"\n\nimport { dashboardReducer } from \"domains/dashboard/reducer\"\nimport { storeKey as dashboardKey } from \"domains/dashboard/constants\"\n\nexport default combineReducers({\n [globalKey]: globalReducer,\n [chartKey]: chartReducer,\n\n // todo lazy-load and inject those reducers, when they are not needed (dashboard.js, cloud)\n [dashboardKey]: dashboardReducer,\n})\n","import axios from \"axios\"\n\nexport const axiosInstance = axios.create({\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n withCredentials: true,\n})\n","import axios from \"axios\"\n\nexport const axiosInstance = axios.create({\n // timeout: 30 * 1000, // todo\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n withCredentials: true,\n})\n","import {\n Subject, from, empty,\n} from \"rxjs\"\nimport {\n mergeMap, tap, catchError, startWith, switchMap,\n} from \"rxjs/operators\"\nimport { CancelTokenSource, Method } from \"axios\"\n\nimport { UnknownStringKeyT } from \"types/common\"\n\nimport { axiosInstance } from \"./axios-instance\"\n\nexport const CHART_UNMOUNTED = \"Chart scrolled out of view\"\n\ninterface FetchInputEvent {\n url: string\n method?: Method\n params?: UnknownStringKeyT\n data?: UnknownStringKeyT\n onErrorCallback: (error: Error) => void\n onSuccessCallback: (data: { [key: string]: unknown }) => void\n cancelTokenSource?: CancelTokenSource\n}\n\nconst METRICS_TIMEOUT = 15_000\n\nexport const getFetchStream = (concurrentCallsLimit: number) => {\n const fetch$ = new Subject<FetchInputEvent>()\n const resetFetch$ = new Subject()\n\n const handler = mergeMap(({\n url, method = \"GET\", params = {}, data, onErrorCallback, onSuccessCallback, cancelTokenSource,\n }: FetchInputEvent) => (\n from(axiosInstance.request({\n url,\n method,\n params,\n data,\n timeout: METRICS_TIMEOUT,\n cancelToken: cancelTokenSource?.token,\n })).pipe(\n tap(({ data: responseData }) => { onSuccessCallback(responseData) }),\n catchError((error: Error) => {\n // todo implement error handling to support NETDATA.options.current.retries_on_data_failures\n if (error?.message !== CHART_UNMOUNTED) {\n console.warn(\"fetch error\", url) // eslint-disable-line no-console\n }\n onErrorCallback(error)\n return empty()\n }),\n )\n ), concurrentCallsLimit)\n\n const output = resetFetch$.pipe(\n startWith(null),\n switchMap(() => fetch$.pipe(handler)),\n )\n\n output.subscribe()\n return [fetch$, resetFetch$]\n}\n","import { tail, sum, reverse } from \"ramda\"\nimport { ChartData, DygraphData } from \"domains/chart/chart-types\"\n\n/*\nwhen requesting for bigger time interval than available history in the agent,\nwe get only the available range. Dashboard was first designed to not allow zooming-out too much.\nBut we want to show the requested time-range, so to do it consistently, we return nr of points\nwhen making the request, and after getting result, we add `null`s at the beginning\n */\n\ninterface GetCorrectedPointsArg {\n after: number\n before: number\n firstEntry: number\n points: number\n}\nexport const getCorrectedPoints = ({\n after,\n before,\n firstEntry,\n points,\n}: GetCorrectedPointsArg) => {\n const nowInSeconds = Math.round(new Date().valueOf() / 1000)\n const afterAbsolute = after > 0 ? after : nowInSeconds + after\n const beforeAbsolute = before > 0 ? before : nowInSeconds + before\n\n if (afterAbsolute < firstEntry) {\n // take into account first_entry\n const realAfter = Math.max(afterAbsolute, firstEntry)\n const requestedRange = beforeAbsolute - afterAbsolute\n const availableRange = beforeAbsolute - realAfter\n\n return Math.round((points * availableRange) / requestedRange)\n }\n return null\n}\n\nexport const addPointsDygraph = (data: DygraphData, nrOfPointsToFill: number) => {\n const viewUpdateEvery = data.view_update_every\n if (!data.result.data.length) {\n return data\n }\n const firstAddedTimestamp = data.result.data[0][0] - nrOfPointsToFill * viewUpdateEvery\n const emptyPoint = tail(data.result.labels).map(() => null)\n const nulls = new Array(nrOfPointsToFill)\n .fill(null)\n .map((_, i) => [firstAddedTimestamp + i * viewUpdateEvery, ...emptyPoint])\n return {\n ...data,\n after: data.after - viewUpdateEvery * nrOfPointsToFill,\n result: {\n ...data.result,\n data: nulls.concat(data.result.data),\n },\n }\n}\n\nexport const fillMissingData = (data: ChartData, nrOfPointsToFill: number) => {\n if (data.format === \"json\") {\n return addPointsDygraph(data as DygraphData, nrOfPointsToFill)\n }\n return data\n}\n\nconst emptyArray: number[] = []\nexport const transformResults = (data: ChartData, format: string, shouldRevertFlip: boolean) => {\n if (format === \"array\" && data.format === \"json\") {\n if (Array.isArray(data.result)) return data\n\n const dataResult = shouldRevertFlip\n ? reverse((data as DygraphData).result.data)\n : (data as DygraphData).result.data\n return {\n ...data,\n // set proper output type so other functions like fillMissingData work properly\n format: \"array\",\n result: dataResult.reduce((acc: number[], pointData: number[]) => {\n pointData.shift()\n return [...acc, sum(pointData)]\n }, emptyArray),\n }\n }\n return data\n}\n\nexport const mapDefaultAggrMethod = (unit: string): string => {\n if (unit.length === 0) {\n return \"sum\"\n }\n const avgUnits: any = {\n percentage: true,\n percent: true,\n \"rotations/min\": true,\n ratio: true,\n seconds: true,\n \"seconds ago\": true,\n milliseconds: true,\n millisec: true,\n ms: true,\n \"log2 s\": true,\n minutes: true,\n hours: true,\n interval: true,\n ticks: true,\n celsius: true,\n c: true,\n mhz: true,\n hz: true,\n volts: true,\n kwh: true,\n ampere: true,\n amps: true,\n dbm: true,\n value: true,\n stratum: true,\n units: true,\n watt: true,\n temperature: true,\n \"random number\": true,\n rpm: true,\n quadro: true,\n \"adv/item\": true,\n multiplier: true,\n geforce: true,\n }\n if (avgUnits[unit.toLowerCase()]) {\n return \"avg\"\n }\n const avgUnitsRegExes: any = [\".*%.*\", \".*/operation\", \".*/run\", \".*/ run\", \".*/request\"]\n if (\n avgUnitsRegExes.some((regEx: string) => {\n const regExpression = RegExp(regEx, \"i\")\n return regExpression.test(unit.toLowerCase())\n })\n ) {\n return \"avg\"\n }\n return \"sum\"\n}\n","import styled from \"styled-components\"\nimport {\n getSizeBy, Text, TextSmall, getColor,\n} from \"@netdata/netdata-ui\"\n\nexport const Container = styled.div`\n width: 100%;\n height: 100%;\n min-height: ${getSizeBy(10)};\n display: flex;\n flex-flow: row nowrap;\n padding: ${getSizeBy(2)} ${getSizeBy(2)} ${getSizeBy(2)} ${getSizeBy(2)};\n`\n\nexport const SideContent = styled.div<{ right?: boolean }>`\n flex-grow: 0;\n flex-shrink: 0;\n height: 100%;\n align-self: stretch;\n`\n\nexport const ContentContainer = styled.div``\n\nexport const HeaderText = styled(Text)<{ error?: boolean; success?: boolean }>`\n color: ${({ error, success }) => (success && getColor(\"success\"))\n || (error && getColor(\"error\"))};\n font-weight: bold;\n display: block;\n margin-bottom: ${getSizeBy()};\n`\n\nexport const ContentText = styled(TextSmall)<{ error?: boolean; success?: boolean }>`\n display: block;\n color: ${({ error }) => (error && getColor(\"error\")) || getColor(\"border\")};\n`\n","import React from \"react\"\nimport {\n Container, SideContent, ContentContainer, HeaderText, ContentText,\n} from \"./styled\"\n\ninterface NotificationProps {\n header?: string\n leftContent?: React.ReactNode\n rightContent?: React.ReactNode\n text?: React.ReactNode\n className?: string\n renderContent?: (props: NotificationProps) => React.ReactNode | React.ReactNodeArray | null\n success?: boolean\n error?: boolean\n}\n\nexport const UINotification = (props: NotificationProps) => {\n const {\n header, text, leftContent, rightContent, renderContent, success, error,\n } = props\n return (\n <Container>\n {leftContent && <SideContent>{leftContent}</SideContent>}\n <ContentContainer>\n {header && (\n <HeaderText success={success} error={error}>\n {header}\n </HeaderText>\n )}\n {text && (\n <ContentText success={success} error={error}>\n {text}\n </ContentText>\n )}\n {renderContent && renderContent(props)}\n </ContentContainer>\n {rightContent && <SideContent right>{rightContent}</SideContent>}\n </Container>\n )\n}\n\n// for usage in non-jsx contexts\n// eslint-disable-next-line react/jsx-props-no-spreading\nexport const createUINotification = (props: NotificationProps) => <UINotification {...props} />\n","import styled from \"styled-components\"\nimport { getSizeBy } from \"@netdata/netdata-ui\"\n\nexport const NodeIconContainer = styled.div`\n width: ${getSizeBy(5)};\n height: ${getSizeBy(5)};\n margin-right: ${getSizeBy(2)};\n display: flex;\n justify-content: center;\n align-items: center;\n`\n\nexport const NotificationLink = styled.a`\n &,\n &:hover {\n text-decoration: underline;\n color: inherit;\n }\n`\n","import React from \"react\"\nimport { Icon } from \"@netdata/netdata-ui\"\nimport { toast } from \"react-toastify\"\n\nimport { createUINotification } from \"components/ui-notification\"\n\nimport * as S from \"./styled\"\n\nexport const toastOptions = {\n position: toast.POSITION.BOTTOM_RIGHT,\n autoClose: 10000,\n pauseOnFocusLoss: false,\n}\n\nexport const showCloudInstallationProblemNotification = () => {\n const uiNotification = {\n header: \"Installation error\",\n text: \"The installer could not prepare the required dependencies to enable Netdata Cloud\"\n + \" functionality\",\n }\n const notificationComponent = createUINotification({\n ...uiNotification,\n error: true,\n leftContent: (\n <S.NodeIconContainer>\n <Icon name=\"gear\" size=\"large\" color=\"error\" />\n </S.NodeIconContainer>\n ),\n })\n toast.error(notificationComponent, toastOptions)\n}\n\nexport const showCloudConnectionProblemNotification = () => {\n const uiNotification = {\n header: \"Connection Problem\",\n text: (\n <S.NotificationLink\n href=\"https://learn.netdata.cloud/docs/agent/packaging/installer#automatic-one-line-installation-script\"\n target=\"_blank\"\n >\n To access Cloud install again your agent via the kickstart script\n </S.NotificationLink>\n ),\n }\n const notificationComponent = createUINotification({\n ...uiNotification,\n error: true,\n leftContent: (\n <S.NodeIconContainer>\n <Icon name=\"gear\" size=\"large\" color=\"error\" />\n </S.NodeIconContainer>\n ),\n })\n toast.error(notificationComponent, toastOptions)\n}\n","import {\n mergeAll, pipe, split, mergeRight,\n} from \"ramda\"\nimport { mapIndexed } from \"ramda-adjunct\"\n\nconst defaultUrlOptions = {\n hash: \"#\",\n theme: null,\n help: null,\n mode: \"live\", // 'live', 'print'\n update_always: false,\n pan_and_zoom: false,\n server: null,\n after: 0,\n before: 0,\n highlight: false,\n highlight_after: 0,\n highlight_before: 0,\n nowelcome: false,\n show_alarms: false,\n chart: null,\n family: null,\n alarm: null,\n alarm_unique_id: 0,\n alarm_id: 0,\n alarm_event_id: 0,\n alarm_when: 0,\n} as {[key: string]: unknown}\n\nconst isInvalidPair = ([key, value]: [string, string]) => (\n defaultUrlOptions[key] === undefined || value === undefined\n)\n\nconst parseQueryPair = ([key, value]: [string, string]): {[key: string] : unknown} => {\n if (isInvalidPair([key, value])) {\n return {}\n }\n return {\n [key]: decodeURIComponent(value),\n }\n}\n\nexport const parseUrl = pipe(\n split(\";\"),\n mapIndexed((value, index) => (\n (index === 0) ? { hash: value } : parseQueryPair((value.split(\"=\") as [string, string]))\n )),\n mergeAll,\n mergeRight(defaultUrlOptions),\n)\n\nconst urlParsed = parseUrl(document.location.hash)\n\nexport const isPrintMode = urlParsed.mode === \"print\"\n","import {\n call,\n put,\n takeEvery,\n select,\n spawn,\n take,\n delay,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { Action } from \"redux-act\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { alwaysEndWithSlash, serverDefault } from \"utils/server-detection\"\nimport { getFetchStream } from \"utils/netdata-sdk\"\nimport { isMainJs } from \"utils/env\"\nimport { fillMissingData, transformResults } from \"utils/fill-missing-data\"\nimport {\n showCloudInstallationProblemNotification, showCloudConnectionProblemNotification,\n} from \"components/notifications\"\nimport { selectGlobalPanAndZoom, selectSnapshot, selectRegistry } from \"domains/global/selectors\"\nimport { StateT as GlobalStateT } from \"domains/global/reducer\"\nimport { stopSnapshotModeAction } from \"domains/dashboard/actions\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { INFO_POLLING_FREQUENCY } from \"domains/global/constants\"\n\nimport {\n fetchDataAction,\n FetchDataPayload,\n fetchChartAction,\n FetchChartPayload,\n fetchDataForSnapshotAction,\n FetchDataForSnapshotPayload,\n fetchInfoAction,\n FetchInfoPayload,\n fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartData } from \"./chart-types\"\n\nconst CONCURRENT_CALLS_LIMIT_METRICS = isMainJs ? 30 : 60\nconst CONCURRENT_CALLS_LIMIT_PRINT = 2\nconst CONCURRENT_CALLS_LIMIT_SNAPSHOTS = 1\n\nconst fetchDataResponseChannel = channel()\n\nexport function* watchFetchDataResponseChannel() {\n while (true) {\n const action = (yield take(fetchDataResponseChannel))\n\n // special case - if requested relative timeRange, and during request the mode has been changed\n // to absolute global-pan-and-zoom, cancel the store update\n // todo do xss check of data\n if (action.type === fetchDataAction.success.toString()) {\n const payload = (action.payload as FetchDataPayload)\n const { viewRange } = payload.fetchDataParams\n const [start, end] = viewRange\n const globalPanAndZoom = (yield select(\n selectGlobalPanAndZoom,\n )) as GlobalStateT[\"globalPanAndZoom\"]\n\n if (globalPanAndZoom\n && (start <= 0 || end <= 0) // check if they are not timestamps\n ) {\n yield put(fetchDataCancelAction({\n id: payload.id,\n }))\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n yield put(action)\n }\n}\n\n// todo construct a new version of key that will be safer to be used in future\n// (while keeping old key supported for some time)\n// perhaps the key could be passed as attribute to the chart, to avoid matching\nconst constructCompatibleKey = (dimensions: undefined | string, options: string) => (\n // strange transformations for backwards compatibility. old snapshot keys were encoded this way\n // that empty dimensions were actually \"null\" string\n `${dimensions === undefined\n ? \"null\"\n : encodeURIComponent(dimensions)\n },${encodeURIComponent(options)}`\n)\n\n// currently BE always transforms data as if `flip` was there\nconst IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS = false\n\nconst getGroupByValues = (groupBy) => {\n if (groupBy === \"chart\") return \"node\"\n if (groupBy === \"node\" || groupBy === \"dimension\") return groupBy\n return `label=${groupBy}`\n}\n\nconst [fetchMetrics$] = getFetchStream(\n isPrintMode ? CONCURRENT_CALLS_LIMIT_PRINT : CONCURRENT_CALLS_LIMIT_METRICS,\n)\nfunction* fetchDataSaga({ payload }: Action<FetchDataPayload>) {\n const {\n // props for api\n host, context, chart, format, points, group, gtime, options,\n after, before, dimensions, labels, postGroupBy, postAggregationMethod,\n aggrMethod, dimensionsAggrMethod, nodeIDs, httpMethod,\n groupBy = \"dimension\", // group by node, dimension, or label keys\n aggrGroups = [],\n // props for the store\n fetchDataParams, id, cancelTokenSource,\n } = payload\n\n const snapshot = yield select(selectSnapshot)\n if (snapshot) {\n // if reading snapshot\n const dimensionsWithUrlOptions = constructCompatibleKey(dimensions, options)\n const matchingKey = Object.keys(snapshot.data).find((snapshotKey) => (\n snapshotKey.startsWith(chart) && snapshotKey.includes(dimensionsWithUrlOptions)\n ))\n if (!matchingKey) {\n // eslint-disable-next-line no-console\n console.warn(`Could not find snapshot key for chart: ${chart} and id ${id}`)\n return\n }\n const data = snapshot.data[matchingKey]\n yield put(fetchDataAction.success({\n chartData: data,\n fetchDataParams,\n id,\n }))\n return\n }\n\n const url = isMainJs\n ? `${alwaysEndWithSlash(host)}api/v1/data`\n : host\n\n const agentOptionsOriginal = options.split(\"|\")\n const hasFlip = agentOptionsOriginal.includes(\"flip\")\n const shouldAddFakeFlip = !IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS && !hasFlip\n // if flip is not respected in composite-charts, send it always (like dygraph charts normally do)\n const agentOptions = shouldAddFakeFlip\n ? agentOptionsOriginal.concat(\"flip\") : agentOptionsOriginal\n\n const groupValues = [\n getGroupByValues(groupBy),\n postGroupBy && `label=${postGroupBy}`,\n ].filter(Boolean)\n\n const axiosOptions = httpMethod === \"POST\" ? {\n // used by cloud's room-overview\n data: {\n filter: {\n nodeIDs,\n context,\n dimensions: dimensions ? dimensions.split(/['|]/) : undefined,\n labels,\n },\n after,\n before,\n points,\n group,\n gtime,\n agent_options: agentOptions,\n ...(postAggregationMethod && { post_aggregation_methods: [postAggregationMethod] }),\n aggregations: [groupBy !== \"dimension\" && {\n method: dimensionsAggrMethod || \"sum\",\n groupBy: [\"chart\", ...groupValues],\n },\n groupBy !== \"chart\" && {\n method: aggrMethod,\n groupBy: groupValues,\n ...(aggrGroups.length && { labels: aggrGroups }),\n }].filter(Boolean),\n },\n } : {\n params: {\n chart,\n _: new Date().valueOf(),\n format,\n points,\n group,\n gtime,\n options,\n after,\n before,\n dimensions,\n },\n }\n\n const onSuccessCallback = (data: { [id: string]: unknown}) => {\n if (!data?.result) {\n fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n } else {\n const { fillMissingPoints } = fetchDataParams\n\n const transformedResults = transformResults(\n (data as unknown) as ChartData,\n format,\n shouldAddFakeFlip,\n )\n\n const chartData = {\n ...transformedResults,\n // @ts-ignore\n ...((\"post_aggregated_data\" in data.result) && {\n postAggregationMethod,\n groupBy,\n postGroupBy,\n aggrGroups,\n // @ts-ignore\n postAggregated: data.result.post_aggregated_data[postAggregationMethod],\n }),\n }\n\n fetchDataResponseChannel.put(fetchDataAction.success({\n chartData: fillMissingPoints\n ? fillMissingData(chartData as ChartData, fillMissingPoints)\n : chartData,\n fetchDataParams,\n id,\n }))\n }\n }\n\n const onErrorCallback = (error: Error) => {\n console.warn(\"fetch chart data failure\", error) // eslint-disable-line no-console\n fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n }\n\n fetchMetrics$.next({\n ...axiosOptions,\n method: httpMethod || \"GET\",\n url,\n onErrorCallback,\n onSuccessCallback,\n cancelTokenSource,\n })\n}\n\nconst [fetchForSnapshot$, resetFetchForSnapshot$] = getFetchStream(CONCURRENT_CALLS_LIMIT_SNAPSHOTS)\nfunction fetchDataForSnapshotSaga({ payload }: Action<FetchDataForSnapshotPayload>) {\n const {\n host, chart, format, points, group, gtime, options,\n after, before, dimensions, aggrMethod,\n groupBy,\n nodeIDs,\n chartLibrary, id,\n } = payload\n\n // backwards-compatibility, the keys look like this:\n // net_errors.stf0,dygraph,null,ms%7Cflip%7Cjsonwrap%7Cnonzero\n const chartDataUniqueID = `${chart},${chartLibrary},${constructCompatibleKey(\n dimensions,\n options,\n )}`\n\n const url = `${alwaysEndWithSlash(host)}api/v1/data`\n const params = {\n chart,\n _: new Date().valueOf(),\n format,\n points,\n group,\n gtime,\n options,\n after,\n before,\n dimensions,\n ...(aggrMethod && { aggr_method: aggrMethod }),\n ...(nodeIDs && { node_ids: nodeIDs.join(\",\") }),\n ...(groupBy && { groupBy }),\n }\n\n const onSuccessCallback = (data: unknown) => {\n fetchDataResponseChannel.put(fetchDataForSnapshotAction.success({\n snapshotData: data,\n id,\n }))\n // temporarly, until main.js finished rewrite\n // @ts-ignore\n window.chartUpdated({\n chartDataUniqueID,\n data,\n })\n }\n\n const onErrorCallback = () => {\n fetchDataResponseChannel.put(fetchDataForSnapshotAction.failure({ id }))\n // @ts-ignore\n window.chartUpdated({\n chartDataUniqueID,\n chart,\n data: null,\n })\n }\n\n fetchForSnapshot$.next({\n url,\n params,\n onErrorCallback,\n onSuccessCallback,\n })\n}\n\nfunction stopSnapshotModeSaga() {\n // any calls in the queue should stop when save-snapshot modal is closed\n resetFetchForSnapshot$.next()\n}\n\nfunction* fetchChartSaga({ payload }: Action<FetchChartPayload>) {\n const { chart, id, host } = payload\n\n const snapshot = yield select(selectSnapshot)\n if (snapshot) {\n yield put(fetchChartAction.success({\n chartMetadata: snapshot.charts.charts[chart],\n id,\n }))\n return\n }\n\n let response\n const url = isMainJs\n ? `${alwaysEndWithSlash(host)}api/v1/chart`\n : host.replace(\"/data\", \"/chart\")\n try {\n response = yield call(axiosInstance.get, url, {\n params: {\n chart,\n },\n })\n } catch (e) {\n console.warn(\"fetch chart details failure\") // eslint-disable-line no-console\n yield put(fetchChartAction.failure({ id }))\n return\n }\n yield put(fetchChartAction.success({\n chartMetadata: response.data,\n id,\n }))\n}\n\nfunction* fetchInfoSaga({ payload }: Action<FetchInfoPayload>) {\n const { poll } = payload\n let isCloudEnabled = false\n let isAgentClaimed = false\n let isCloudAvailable = false\n let isACLKAvailable = false\n\n try {\n const registry: GlobalStateT[\"registry\"] = yield select(selectRegistry)\n const wasCloudAvailable = registry?.isCloudAvailable\n const wasACLKAvailable = registry?.isACLKAvailable\n\n const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/info`)\n isCloudAvailable = data?.[\"cloud-available\"] || false\n isCloudEnabled = data?.[\"cloud-enabled\"] || false\n isAgentClaimed = data?.[\"agent-claimed\"] || false\n isACLKAvailable = data?.[\"aclk-available\"] || false\n\n yield put(fetchInfoAction.success({\n isCloudAvailable, isCloudEnabled, isAgentClaimed, isACLKAvailable, fullInfoPayload: data,\n }))\n\n if (isCloudEnabled && (wasCloudAvailable === null) && !isCloudAvailable) {\n // show only once per session\n showCloudInstallationProblemNotification()\n }\n if (isCloudAvailable && isAgentClaimed && (wasACLKAvailable !== false) && !isACLKAvailable) {\n // show at session-init and if we see a change of isACLKAvailable from true to false\n showCloudConnectionProblemNotification()\n }\n // TODO: No success notification spec`ed?\n // else if (!wasACLKAvailable && isACLKAvailable) {\n // toast.success(\"Connected to the Cloud!\", {\n // position: \"bottom-right\",\n // type: toast.TYPE.SUCCESS,\n // autoClose: NOTIFICATIONS_TIMEOUT,\n // })\n // }\n } catch (e) {\n console.warn(\"fetch agent info failure\") // eslint-disable-line no-console\n yield put(fetchInfoAction.failure())\n }\n\n if (poll && isCloudEnabled && isAgentClaimed) {\n yield delay(INFO_POLLING_FREQUENCY)\n yield put(fetchInfoAction({ poll: true }))\n }\n}\n\n\nexport function* chartSagas() {\n yield takeEvery(fetchDataAction.request, fetchDataSaga)\n yield takeEvery(fetchChartAction.request, fetchChartSaga)\n yield takeEvery(fetchDataForSnapshotAction.request, fetchDataForSnapshotSaga)\n yield takeEvery(stopSnapshotModeAction, stopSnapshotModeSaga)\n yield takeEvery(fetchInfoAction.request, fetchInfoSaga)\n yield spawn(watchFetchDataResponseChannel)\n}\n","export const sidePanelTransitionTimeInSeconds = 0.2\n","import { sortBy, prop, last } from \"ramda\"\nimport { Action } from \"redux-act\"\nimport {\n call, delay, spawn, take, takeEvery, put,\n} from \"redux-saga/effects\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { name2id } from \"utils/name-2-id\"\n\nimport {\n startAlarmsAction, StartAlarmsPayload, fetchAllAlarmsAction, updateActiveAlarmsAction,\n} from \"./actions\"\nimport { AlarmLogs, AlarmLog, ActiveAlarms } from \"./types\"\n\nconst ALARMS_INITIALIZATION_DELAY = 1000\nconst ALARMS_UPDATE_EVERY = 10000 // the time in ms between alarm checks\nconst CHART_DIV_OFFSET = -50\n\n// firefox moves the alarms off-screen (above, outside the top of the screen)\n// if alarms are shown faster than: one per 500ms\nconst ALARMS_MS_BETWEEN_NOTIFICATIONS = 500\n\n// equal to old NETDATA.alarms.notifications\nconst areNotificationsAvailable = \"Notification\" in window\n\nconst notificationCallback = window.netdataAlarmsNotifCallback\n\n\n// todo this doesnt change in the session, but should be moved to the redux state anyway\nlet firstNotificationId = 0\nlet lastNotificationId = 0\n\n\nconst scrollToChart = (chartID: unknown): boolean => {\n if (typeof chartID === \"string\") {\n const chartElement = document.querySelector(`#chart_${name2id(chartID)}`)\n if (chartElement) {\n const offset = (chartElement as HTMLDivElement).offsetTop + CHART_DIV_OFFSET;\n (document.querySelector(\"html\") as HTMLElement).scrollTop = offset\n return true\n }\n }\n return false\n}\n\n// perhaps sagas are not the best place for this\nconst scrollToAlarm = (alarm: AlarmLog) => {\n if (typeof alarm === \"object\") {\n const hasFoundChart = scrollToChart(alarm.chart)\n if (hasFoundChart) {\n window.focus()\n }\n }\n}\n\nconst requestPermissions = () => {\n if (areNotificationsAvailable) {\n if (Notification.permission === \"default\") {\n Notification.requestPermission()\n }\n }\n}\n\nconst hasGivenNotificationPermissions = () => (areNotificationsAvailable\n && Notification.permission === \"granted\"\n)\n\nfunction* getLog(lastNotificationIdArg: number, serverDefault: string) {\n try {\n const { data } = yield call(\n axiosInstance.get,\n `${serverDefault}/api/v1/alarm_log?after=${lastNotificationIdArg}`,\n )\n // todo xss check\n return data\n } catch (error) {\n console.warn(\"Error fetching alarms log\", error) // eslint-disable-line no-console\n return null\n }\n}\n\ninterface NotificationConfig {\n notificationTitle: string\n notificationOptions: NotificationOptions\n notificationHandler: (event: Event) => void\n}\n// called \"notify\" in old codebase\nconst getNotification = (\n entry: AlarmLog, activeAlarms: ActiveAlarms, firstNotificationIdArg: number,\n): NotificationConfig | undefined => {\n if (entry.updated) {\n // has been updated by another alarm\n return\n }\n\n let valueString = entry.value_string\n const t = activeAlarms.alarms[`${entry.chart}.${entry.name}`]\n if (typeof t !== \"undefined\"\n && entry.status === t.status\n && typeof t.value_string !== \"undefined\"\n ) {\n valueString = t.value_string\n }\n\n const name = entry.name.replace(/_/g, \" \")\n let status = entry.status.toLowerCase()\n let title = `${name} = ${valueString}`\n const tag = entry.alarm_id\n let icon = \"images/banner-icon-144x144.png\"\n let interaction = false\n let show = true\n\n // switch/case left here to simplify refractor (it's very similar to old code)\n switch (entry.status) {\n case \"REMOVED\":\n show = false\n break\n\n case \"UNDEFINED\":\n return\n\n case \"UNINITIALIZED\":\n return\n\n case \"CLEAR\":\n if (entry.unique_id < firstNotificationIdArg) {\n // alarm is not current\n return\n }\n if (entry.old_status === \"UNINITIALIZED\" || entry.old_status === \"UNDEFINED\") {\n // alarm switch to CLEAR from old_status\n return\n }\n if (entry.no_clear_notification) {\n // alarm is CLEAR but has no_clear_notification flag\n return\n }\n title = `${name} back to normal (${valueString})`\n icon = \"images/check-mark-2-128-green.png\"\n interaction = false\n break\n\n case \"WARNING\":\n if (entry.old_status === \"CRITICAL\") {\n status = `demoted to ${entry.status.toLowerCase()}`\n }\n\n icon = \"images/alert-128-orange.png\"\n interaction = false\n break\n\n case \"CRITICAL\":\n if (entry.old_status === \"WARNING\") {\n status = `escalated to ${entry.status.toLowerCase()}`\n }\n\n icon = \"images/alert-128-red.png\"\n interaction = true\n break\n\n default:\n console.warn(`invalid alarm status ${entry.status}`) // eslint-disable-line no-console\n return\n }\n\n // filter recipients\n // if (show) {\n // show = NETDATA.alarms.recipientMatches(entry.recipient, NETDATA.alarms.recipients)\n // }\n\n\n if (show) {\n if (typeof notificationCallback === \"function\") {\n show = notificationCallback(entry)\n }\n\n if (show) {\n // show this notification\n // eslint-disable-next-line consistent-return\n return {\n notificationTitle: title,\n notificationOptions: {\n body: `${entry.hostname} - ${entry.chart} (${entry.family}) - ${status}: ${entry.info}`,\n tag: `${tag}`,\n requireInteraction: interaction,\n icon: serverStatic + icon,\n data: entry,\n },\n notificationHandler: (event: Event) => {\n event.preventDefault()\n if (event.target) {\n const { data } = event.target as Notification\n scrollToAlarm(data)\n }\n },\n }\n }\n }\n}\n\nfunction* notifyAll(serverDefault: string, activeAlarms: ActiveAlarms) {\n const alarmLogs: AlarmLogs = yield call(getLog, lastNotificationId, serverDefault)\n if (alarmLogs === null || typeof alarmLogs !== \"object\") {\n console.warn(\"invalid alarms log response\") // eslint-disable-line no-console\n return\n }\n\n if (alarmLogs.length === 0) {\n console.log(\"received empty alarm log\") // eslint-disable-line no-console\n return\n }\n\n const logsSorted = sortBy(prop(\"unique_id\"), alarmLogs)\n\n // eslint-disable-next-line camelcase\n const newLogs = logsSorted.filter(({ unique_id }) => unique_id > lastNotificationId)\n const notifications = newLogs\n .map((entry) => (getNotification(entry, activeAlarms, firstNotificationId)))\n .filter((x) => x !== undefined) as NotificationConfig[]\n\n for (let i = 0; i < notifications.length; i += 1) {\n const {\n notificationTitle, notificationOptions, notificationHandler,\n } = notifications[i]\n const notification = new Notification(\n notificationTitle,\n notificationOptions,\n )\n notification.onclick = notificationHandler\n\n yield delay(ALARMS_MS_BETWEEN_NOTIFICATIONS)\n }\n\n // todo put to redux store\n lastNotificationId = (last(logsSorted) as AlarmLog).unique_id\n\n if (typeof window.netdataAlarmsRemember === \"undefined\" || window.netdataAlarmsRemember) {\n localStorage.setItem(\"last_notification_id\", `${lastNotificationId}`)\n }\n}\n\n\nfunction* get(what: string, serverDefault: string) {\n const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/alarms?${what}`)\n if (firstNotificationId === 0 && typeof data.latest_alarm_log_unique_id === \"number\") {\n firstNotificationId = data.latest_alarm_log_unique_id\n }\n return data\n}\n\nfunction* alarmsLoop(serverDefault: string) {\n while (true) {\n const activeAlarms = (yield call(get, \"active\", serverDefault)) as ActiveAlarms\n if (activeAlarms) {\n yield put(updateActiveAlarmsAction({ activeAlarms }))\n if (\n hasGivenNotificationPermissions()\n // timestamps in seconds\n && (activeAlarms.latest_alarm_log_unique_id > lastNotificationId)\n ) {\n yield call(notifyAll, serverDefault, activeAlarms)\n\n if (activeAlarms.status === false) {\n // Health monitoring is disabled on this netdata\n break\n }\n }\n }\n yield delay(ALARMS_UPDATE_EVERY)\n }\n}\n\nfunction* startAlarms() {\n // make sure we handle that action only once, we don't want multiple intervals/loops\n const { payload }: { payload: StartAlarmsPayload } = yield take(startAlarmsAction)\n const { serverDefault } = payload\n\n yield delay(ALARMS_INITIALIZATION_DELAY)\n\n lastNotificationId = +(localStorage.getItem(\"last_notification_id\") || lastNotificationId)\n requestPermissions()\n yield call(alarmsLoop, serverDefault)\n}\n\ntype FetchAllAlarmsPayload = {\n callback: (x: unknown) => void,\n serverDefault: string,\n}\nfunction* fetchAllAlarmsSaga({ payload }: Action<FetchAllAlarmsPayload>) {\n const { callback, serverDefault } = payload\n const allAlarms = yield call(get, \"all\", serverDefault)\n callback(allAlarms)\n}\n\nexport function* alarmsSagas() {\n yield spawn(startAlarms)\n yield takeEvery(fetchAllAlarmsAction.request, fetchAllAlarmsSaga)\n}\n","const allowedReferrerDomains = [\n \"\",\n \"https://www.google.com/\",\n \"https://duckduckgo.com/\",\n \"https://www.reddit.com/\",\n]\n\nexport const isAllowedReferrer = (referrer: string) => allowedReferrerDomains.includes(referrer)\n || referrer.endsWith(\".my-netdata.io/\")\n || referrer.startsWith(\"https://github.com/\")\n || referrer.endsWith(\"netdata.cloud/\")\n || referrer.startsWith(\"https://app.netdata.cloud/\")\n","import { uniq, filter } from \"ramda\"\nimport {\n spawn, take, put, takeEvery, call, delay, select,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { AxiosResponse } from \"axios\"\nimport { Action } from \"redux-act\"\n\nimport { NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport { axiosInstance } from \"utils/api\"\nimport { isDemo } from \"utils/is-demo\"\nimport { sidePanelTransitionTimeInSeconds } from \"components/space-panel/settings\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\n\nimport {\n fetchHelloAction,\n FetchHelloPayload,\n windowFocusChangeAction,\n updatePersonUrlsAction,\n SetOptionAction,\n setOptionAction,\n setSpacePanelStatusAction,\n SetSpacePanelStatusActionPayload,\n setSpacePanelTransitionEndAction,\n HelloResponse,\n accessRegistrySuccessAction,\n} from \"./actions\"\nimport { alarmsSagas } from \"./alarms-sagas\"\nimport { MASKED_DATA } from \"./constants\"\nimport { selectFullInfoPayload } from \"./selectors\"\nimport { isAllowedReferrer } from \"./utils\"\nimport { InfoPayload } from \"./__mocks__/info-mock\"\n\nconst windowFocusChannel = channel()\n\nexport function listenToWindowFocus() {\n window.addEventListener(\"focus\", () => {\n windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: true }))\n })\n window.addEventListener(\"blur\", () => {\n windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: false }))\n })\n}\n\nexport function* watchWindowFocusChannel() {\n while (true) {\n const action = yield take(windowFocusChannel)\n yield put(action)\n }\n}\n\nfunction* waitForFullInfoPayload() {\n return (yield take(fetchInfoAction.success)).payload.fullInfoPayload\n}\n\nfunction* injectPosthog(machineGuid: string, personGuid?: string) {\n if (window.posthog) {\n return\n }\n const info: InfoPayload = (yield select(selectFullInfoPayload))\n || (yield call(waitForFullInfoPayload))\n || {}\n\n /* eslint-disable */\n // @ts-ignore\n !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text/javascript\",p.async=!0,p.src=s.api_host+\"/static/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags\".split(\" \"),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);\n /* eslint-enable */\n window.posthog.init(\"mqkwGT0JNFqO-zX2t0mW6Tec9yooaVu7xCBlXtHnt5Y\", {\n api_host: \"https://posthog.netdata.cloud\",\n loaded: (posthog: any) => {\n if (personGuid) {\n posthog.identify(personGuid)\n }\n },\n })\n const shouldMaskReferrer = !isDemo && !isAllowedReferrer(document.referrer)\n const MASKED = \"masked\"\n window.posthog.register(\n // remove properties with unavailable values\n filter((value) => value !== undefined && value !== null,\n {\n $ip: \"127.0.0.1\",\n $current_url: isDemo ? null : \"agent dashboard\",\n $pathname: isDemo ? null : \"netdata-dashboard\",\n $host: isDemo ? null : \"dashboard.netdata.io\",\n\n $initial_referring_domain: shouldMaskReferrer ? MASKED : null,\n $initial_referrer: shouldMaskReferrer ? MASKED : null,\n $referring_domain: shouldMaskReferrer ? MASKED : null,\n $referrer: shouldMaskReferrer ? MASKED : null,\n\n event_source: \"agent dashboard\",\n\n netdata_version: info.version,\n netdata_machine_guid: machineGuid,\n netdata_person_id: personGuid || \"Unavailable\",\n netdata_buildinfo: info[\"buildinfo\"],\n netdata_release_channel: info[\"release-channel\"],\n mirrored_host_count: info.mirrored_hosts?.length,\n alarms_normal: info.alarms?.normal,\n alarms_warning: info.alarms?.warning,\n alarms_critical: info.alarms.critical,\n host_os_name: info.os_name,\n host_os_id: info.os_id,\n host_os_id_like: info.os_id_like,\n host_os_version: info.os_version,\n host_os_version_id: info.os_version_id,\n host_os_detection: info.os_detection,\n system_cores_total: info.cores_total,\n system_total_disk_space: info.total_disk_space,\n system_cpu_freq: info.cpu_freq,\n system_ram_total: info.ram_total,\n system_kernel_name: info.kernel_name,\n system_kernel_version: info.kernel_version,\n system_architecture: info.architecture,\n system_virtualization: info.virtualization,\n system_virt_detection: info.virt_detection,\n system_container: info.container,\n system_container_detection: info.container_detection,\n container_os_name: info.container_os_name,\n container_os_id: info.container_os_id,\n container_os_id_like: info.container_os_id_like,\n container_os_version: info.container_os_version,\n container_os_version_id: info.container_os_version_id,\n host_collectors_count: info.collectors.length,\n host_cloud_enabled: info[\"cloud-enabled\"],\n host_cloud_available: info[\"cloud-available\"],\n host_agent_claimed: info[\"agent-claimed\"],\n host_aclk_available: info[\"aclk-available\"],\n host_aclk_implementation: info[\"aclk-implementation\"],\n host_allmetrics_json_used: info[\"allmetrics-json-used\"],\n host_allmetrics_prometheus_used: info[\"allmetrics-prometheus-used\"],\n host_allmetrics_shell_used: info[\"allmetrics-shell-used\"],\n host_charts_count: info[\"charts-count\"],\n host_dashboard_used: info[\"dashboard-used\"],\n host_metrics_count: info[\"metrics-count\"],\n host_notification_methods: info[\"notification-methods\"],\n config_memory_mode: info[\"memory-mode\"],\n config_exporting_enabled: info[\"exporting-enabled\"],\n config_exporting_connectors: info[\"exporting-connectors\"],\n config_hosts_available: info[\"hosts-available\"],\n config_https_enabled: info[\"https-enabled\"],\n config_multidb_disk_quota: info[\"multidb-disk-quota\"],\n config_page_cache_size: info[\"page-cache-size\"],\n config_stream_enabled: info[\"stream-enabled\"],\n config_web_enabled: info[\"web-enabled\"],\n // eslint-disable-next-line camelcase\n host_is_parent: info.host_labels?._is_parent,\n mirrored_hosts_reachable: info.mirrored_hosts_status\n .filter(({ reachable }) => reachable).length,\n mirrored_hosts_unreachable: info.mirrored_hosts_status\n .filter(({ reachable }) => !reachable).length,\n host_collectors: info.collectors,\n host_is_k8s_node: info.is_k8s_node,\n }),\n )\n}\n\nexport type PersonUrl = [\n string, // guid\n string, // url\n number, // last timestamp (ms)\n number, // accesses\n string // name\n]\n\ntype AccessRegistryResponse = null | {\n personGuid?: string\n registryServer: string\n urls?: PersonUrl[]\n}\n\ntype AccessRegistry = (args: {\n machineGuid: string\n maxRedirects: number\n name: string\n registryServer: string\n url: string\n}) => Promise<AccessRegistryResponse>\nconst accessRegistry: AccessRegistry = ({\n machineGuid, maxRedirects, name, registryServer, url,\n}) => axiosInstance.get(`${registryServer}/api/v1/registry`, {\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n params: {\n action: \"access\",\n machine: machineGuid,\n name,\n url,\n },\n withCredentials: true, // required for the cookie\n}).then(({ data }) => {\n // todo xss check\n const isRedirect = typeof data.registry === \"string\"\n\n let returnData = data\n if (typeof data.status !== \"string\" || data.status !== \"ok\") {\n // todo throw error (409 in old dashboard)\n returnData = null\n }\n\n if (returnData === null) {\n if (isRedirect && maxRedirects > 0) {\n return accessRegistry({\n maxRedirects: maxRedirects - 1,\n machineGuid,\n name,\n registryServer: data.registry,\n url,\n })\n }\n return { registryServer }\n }\n const urls = data.urls.filter((u: [string, string]) => u[1] !== MASKED_DATA)\n return {\n personGuid: data.person_guid || null,\n registryServer,\n urls,\n }\n}).catch(() => {\n // todo handle error in better way (410 in old dashboard)\n console.warn(\"error calling registry:\", registryServer) // eslint-disable-line no-console\n return null\n})\n\nexport interface RegistryMachine {\n guid: string\n url: string\n lastTimestamp: number\n accesses: number\n name: string\n alternateUrls: string[]\n}\n\ntype ParsePersonUrls = (\n personUrls: PersonUrl[]\n) => {\n registryMachines: { [key: string]: RegistryMachine }\n registryMachinesArray: RegistryMachine[]\n}\nexport const parsePersonUrls: ParsePersonUrls = (personUrls) => {\n // todo main.js is using registryMachines, but should use only the array\n const registryMachines: { [key: string]: RegistryMachine } = {}\n\n personUrls\n .slice()\n .reverse()\n .forEach(([guid, url, lastTimestamp, accesses, name]: PersonUrl) => {\n const existingObj = registryMachines[guid] || {\n lastTimestamp: 0,\n accesses: 0,\n alternateUrls: [],\n guid: \"\",\n url: \"\",\n name: \"\"\n }\n const isNewer = existingObj.lastTimestamp < lastTimestamp\n const extended: RegistryMachine = {\n guid: existingObj.guid || guid,\n url: isNewer ? url : existingObj.url,\n lastTimestamp: isNewer ? lastTimestamp : existingObj.lastTimestamp,\n accesses: existingObj.accesses + accesses,\n name: isNewer ? name : existingObj.name,\n alternateUrls: existingObj.alternateUrls.concat(url),\n }\n registryMachines[guid] = extended\n })\n\n const registryMachinesArray = uniq(\n // not sure if reverse is needed, but it was in old dashboard\n personUrls\n .slice()\n .reverse()\n .map(([guid]: PersonUrl) => guid),\n ).map((guid) => registryMachines[guid])\n return {\n registryMachines,\n registryMachinesArray,\n }\n}\n\nfunction* fetchHelloSaga({ payload }: Action<FetchHelloPayload>) {\n const { serverDefault } = payload\n const helloCallUrl = `${serverDefault}api/v1/registry?action=hello`\n let response: AxiosResponse<HelloResponse>\n try {\n response = yield call(axiosInstance.get, helloCallUrl, {\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n withCredentials: true,\n })\n } catch (error) {\n console.warn(\"error accessing registry or Do-Not-Track is enabled\") // eslint-disable-line\n yield put(fetchHelloAction.failure())\n return\n }\n const cloudBaseURL = response.data.cloud_base_url\n const { hostname } = response.data\n const machineGuid = response.data.machine_guid\n const registryServer = response.data.registry\n const isUsingGlobalRegistry = registryServer === NETDATA_REGISTRY_SERVER\n\n yield put(fetchHelloAction.success({\n cloudBaseURL,\n hostname,\n isUsingGlobalRegistry,\n machineGuid,\n }))\n\n const name = isUsingGlobalRegistry ? MASKED_DATA : hostname\n const url = isUsingGlobalRegistry ? MASKED_DATA : serverDefault\n\n // now make access call - max_redirects, callback, etc...\n const accessRegistryResponse: AccessRegistryResponse = yield call(accessRegistry, {\n machineGuid,\n maxRedirects: 2,\n name,\n registryServer,\n url,\n })\n\n if (response.data.anonymous_statistics) {\n yield spawn(injectPosthog, response.data.machine_guid, accessRegistryResponse?.personGuid)\n }\n\n if (accessRegistryResponse?.urls && accessRegistryResponse?.personGuid) {\n const personUrls = parsePersonUrls(accessRegistryResponse.urls)\n const { registryMachines, registryMachinesArray } = personUrls\n yield put(updatePersonUrlsAction({\n personGuid: accessRegistryResponse.personGuid,\n registryMachines,\n registryMachinesArray,\n }))\n }\n\n yield put(accessRegistrySuccessAction({\n registryServer: accessRegistryResponse?.registryServer || registryServer,\n }))\n}\n\nconst constructOptionStorageKey = (key: string) => `options.${key}`\nfunction setOptionSaga({ payload }: Action<SetOptionAction>) {\n const { key, value } = payload\n if (key === \"stop_updates_when_focus_is_lost\") {\n // old dashboard was saving that property to localStorage, but was always ommiting it when\n // reading. it was only possible to persist this setting via url (update_always hash param)\n return\n }\n localStorage.setItem(constructOptionStorageKey(key), JSON.stringify(value))\n}\n\nfunction* spacePanelSaga({ payload }: Action<SetSpacePanelStatusActionPayload>) {\n if (payload.isActive) {\n document.body.className = \"with-panel\"\n } else {\n document.body.className = \"\"\n }\n yield delay(sidePanelTransitionTimeInSeconds * 1000)\n yield put(setSpacePanelTransitionEndAction({ isActive: payload.isActive }))\n}\n\nexport function* globalSagas() {\n yield spawn(listenToWindowFocus)\n yield spawn(watchWindowFocusChannel)\n yield takeEvery(fetchHelloAction.request, fetchHelloSaga)\n yield spawn(alarmsSagas)\n yield takeEvery(setOptionAction, setOptionSaga)\n yield takeEvery(setSpacePanelStatusAction, spacePanelSaga)\n}\n","/* eslint-disable camelcase */\n/* eslint-disable operator-linebreak */\nimport { take, takeEvery } from \"redux-saga/effects\"\nimport { Action } from \"redux-act\"\n\nimport {\n clearHighlightAction,\n SetGlobalChartUnderlayAction,\n setGlobalChartUnderlayAction,\n} from \"domains/global/actions\"\nimport {\n explicitlySignInAction,\n showSignInModalAction,\n ShowSignInModalAction,\n} from \"domains/dashboard/actions\"\nimport { setHashParams, getHashParams, removeHashParams } from \"utils/hash-utils\"\n\nexport const LOCAL_STORAGE_NEEDS_SYNC = \"LOCAL-STORAGE-NEEDS-SYNC\"\n\nfunction setGlobalChartUnderlaySaga({ payload }: Action<SetGlobalChartUnderlayAction>) {\n const { after, before } = payload\n if (window.urlOptions) {\n // additional check to prevent loop, after setting initial state from url\n if (window.urlOptions.after !== after || window.urlOptions.before !== before) {\n window.urlOptions.netdataHighlightCallback(true, after, before)\n }\n } else {\n // TODO: Consider a setting to control wether the component sets these hash params\n const hashParams = getHashParams()\n const highlight_after = Math.round(after).toString()\n const highlight_before = Math.round(before).toString()\n if (\n hashParams.highlight_after !== highlight_after ||\n hashParams.highlight_before !== highlight_before\n ) {\n setHashParams({ highlight_after, highlight_before })\n }\n }\n}\n\nfunction clearHighlightSaga() {\n if (window.urlOptions) {\n window.urlOptions.netdataHighlightCallback(false, 0, 0)\n } else {\n removeHashParams([\"highlight_after\", \"highlight_before\"])\n }\n}\n\nfunction* showSignInSaga({ payload }: Action<ShowSignInModalAction>) {\n if (window.showSignInModal) {\n window.showSignInModal()\n\n yield take(explicitlySignInAction)\n const { signInLinkHref } = payload\n window.localStorage.setItem(LOCAL_STORAGE_NEEDS_SYNC, \"true\")\n window.location.href = signInLinkHref\n }\n}\n\nexport function* mainJsSagas() {\n yield takeEvery(setGlobalChartUnderlayAction, setGlobalChartUnderlaySaga)\n yield takeEvery(clearHighlightAction, clearHighlightSaga)\n yield takeEvery(showSignInModalAction, showSignInSaga)\n}\n","import { spawn } from \"redux-saga/effects\"\n\nimport { chartSagas } from \"domains/chart/sagas\"\nimport { globalSagas } from \"domains/global/sagas\"\nimport { mainJsSagas } from \"domains/dashboard/sagas\"\n\nexport function* rootSaga() {\n yield spawn(globalSagas)\n yield spawn(chartSagas)\n yield spawn(mainJsSagas)\n}\n","import { compose, applyMiddleware, createStore } from \"redux\"\nimport createSagaMiddleware from \"redux-saga\"\nimport rootReducer from \"./root-reducer\"\nimport { rootSaga } from \"./root-saga\"\n\nconst sagaMiddleware = createSagaMiddleware()\n\nconst reduxDevTools = process.env.NODE_ENV === \"development\"\n && window.__REDUX_DEVTOOLS_EXTENSION__\n // @ts-ignore\n && window.__REDUX_DEVTOOLS_EXTENSION__({ name: \"Dashboard Charts\" })\n\nconst composeMiddlewaresWithDevTools = () => (reduxDevTools\n ? compose(applyMiddleware(sagaMiddleware), reduxDevTools)\n : compose(applyMiddleware(sagaMiddleware)))\n\nexport const configureStore = () => {\n const store = createStore(\n rootReducer,\n composeMiddlewaresWithDevTools(),\n )\n sagaMiddleware.run(rootSaga)\n return store\n}\n\nexport const store = configureStore()\n","import $ from \"jquery\"\n\nwindow.$ = $\nwindow.jQuery = $\n","let loadCssPromise: Promise<void>\n\ntype LoadCss = (href: string) => Promise<void>\nexport const loadCss: LoadCss = (href) => {\n if (loadCssPromise) {\n return loadCssPromise\n }\n return new Promise((resolve, reject) => {\n const fileRef = document.createElement(\"link\")\n fileRef.setAttribute(\"rel\", \"stylesheet\")\n fileRef.setAttribute(\"type\", \"text/css\")\n fileRef.setAttribute(\"href\", href)\n\n fileRef.onload = () => {\n resolve()\n }\n\n fileRef.onerror = () => {\n reject(Error(`Error loading css: ${href}`))\n }\n\n document.getElementsByTagName(\"head\")[0].appendChild(fileRef)\n })\n}\n","import classNames from \"classnames\"\nimport { Attributes } from \"./transformDataAttributes\"\n\nexport type ChartLibraryName =\n | \"dygraph\"\n | \"sparkline\"\n | \"peity\"\n | \"google\"\n // | \"d3\"\n | \"d3pie\"\n | \"easypiechart\"\n | \"gauge\"\n | \"textonly\"\n | \"groupbox\"\nexport interface ChartLibraryConfig {\n aspectRatio?: number\n format: string\n hasLegend: (attributes: Attributes) => boolean\n hasToolboxPanAndZoom?: boolean\n isLogScale?: (attributes: Attributes) => boolean\n options: (attributes: Attributes) => string\n trackColors: boolean\n pixelsPerPoint: (attributes: Attributes) => number\n xssRegexIgnore: RegExp\n containerClass: (attributes: Attributes) => string\n}\nexport type ChartLibrariesSettings = {\n [key in ChartLibraryName]: ChartLibraryConfig\n}\n\ntype IsDygraphSparkline = (attributes: Attributes) => boolean\nconst isDygraphSparkline: IsDygraphSparkline = (attributes) => (\n attributes.dygraphTheme === \"sparkline\"\n)\n\nexport const chartLibrariesSettings: ChartLibrariesSettings = {\n dygraph: {\n // initialize: window.NETDATA.dygraphInitialize,\n // create: window.NETDATA.dygraphChartCreate,\n // update: window.NETDATA.dygraphChartUpdate,\n // resize(state) {\n // if (typeof state.tmp.dygraph_instance !== \"undefined\"\n // && typeof state.tmp.dygraph_instance.resize === \"function\") {\n // state.tmp.dygraph_instance.resize()\n // }\n // },\n // setSelection: window.NETDATA.dygraphSetSelection,\n // clearSelection: window.NETDATA.dygraphClearSelection,\n hasToolboxPanAndZoom: true,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n format: \"json\",\n options(attributes: Attributes) {\n if (typeof this.isLogScale === \"function\") {\n // flip - in proper order (from oldest to newest)\n return `ms|flip${this.isLogScale(attributes) ? \"|abs\" : \"\"}`\n }\n return \"\"\n },\n hasLegend(attributes: Attributes) {\n // not using __hasLegendCache__ as in old-dashboard, because performance tweaks like this\n // probably won't be needed in react app\n const { legend = true } = attributes\n return !isDygraphSparkline(attributes) && Boolean(legend)\n },\n // autoresize(state) {\n // void (state)\n // return true\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: ((attributes: Attributes) => (isDygraphSparkline(attributes) ? 2 : 3)),\n // pixels_per_point(state) {\n // return (this.isSparkline(state) === false) ? 3 : 2\n // },\n isLogScale(attributes: Attributes) {\n return attributes.dygraphTheme === \"logscale\"\n },\n containerClass(attributes: Attributes) {\n return this.hasLegend(attributes)\n ? classNames(\n \"netdata-container-with-legend\",\n attributes.legendPosition === \"bottom\" && \"netdata-container-with-legend--bottom\",\n )\n : \"netdata-container\"\n },\n // container_class(state) {\n // if (this.legend(state) !== null) {\n // return \"netdata-container-with-legend\"\n // }\n // return \"netdata-container\"\n // },\n },\n sparkline: {\n // initialize: window.NETDATA.sparklineInitialize,\n // create: window.NETDATA.sparklineChartCreate,\n // update: window.NETDATA.sparklineChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options: () => \"flip|abs\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 3,\n containerClass: () => \"netdata-container\",\n },\n peity: {\n // initialize: window.NETDATA.peityInitialize,\n // create: window.NETDATA.peityChartCreate,\n // update: window.NETDATA.peityChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"ssvcomma\",\n options: () => \"null2zero|flip|abs\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 3,\n containerClass: () => \"netdata-container\",\n },\n google: {\n // initialize: window.NETDATA.googleInitialize,\n // create: window.NETDATA.googleChartCreate,\n // update: window.NETDATA.googleChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.rows$\"),\n format: \"datatable\",\n options: () => \"\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 300\n // },\n trackColors: false,\n pixelsPerPoint: () => 4,\n containerClass: () => \"netdata-container\",\n },\n d3pie: {\n // initialize: window.NETDATA.d3pieInitialize,\n // create: window.NETDATA.d3pieChartCreate,\n // update: window.NETDATA.d3pieChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.d3pieSetSelection,\n // clearSelection: window.NETDATA.d3pieClearSelection,\n hasToolboxPanAndZoom: false,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n format: \"json\",\n hasLegend: () => false,\n options: () => \"objectrows|ms\",\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 15,\n containerClass: () => \"netdata-container\",\n },\n // d3: {\n // initialize: window.NETDATA.d3Initialize,\n // create: window.NETDATA.d3ChartCreate,\n // update: window.NETDATA.d3ChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n // toolboxPanAndZoom: null,\n // initialized: false,\n // enabled: true,\n // xssRegexIgnore: new RegExp(\"^/api/v1/data\\.result.data$\"),\n // format(state) {\n // void (state)\n // return \"json\"\n // },\n // options(state) {\n // void (state)\n // return \"\"\n // },\n // legend(state) {\n // void (state)\n // return null\n // },\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n // track_colors(state) {\n // void (state)\n // return false\n // },\n // pixels_per_point(state) {\n // void (state)\n // return 3\n // },\n // container_class(state) {\n // void (state)\n // return \"netdata-container\"\n // },\n // },\n easypiechart: {\n // initialize: window.NETDATA.easypiechartInitialize,\n // create: window.NETDATA.easypiechartChartCreate,\n // update: window.NETDATA.easypiechartChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.easypiechartSetSelection,\n // clearSelection: window.NETDATA.easypiechartClearSelection,\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options() {\n return \"absolute\"\n },\n hasLegend() {\n return false\n },\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: () => 3,\n aspectRatio: 100,\n containerClass: () => \"netdata-container-easypiechart\",\n },\n gauge: {\n // initialize: window.NETDATA.gaugeInitialize,\n // create: window.NETDATA.gaugeChartCreate,\n // update: window.NETDATA.gaugeChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.gaugeSetSelection,\n // clearSelection: window.NETDATA.gaugeClearSelection,\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options: () => \"absolute\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: () => 3,\n aspectRatio: 60,\n containerClass: () => \"netdata-container-gauge\",\n },\n textonly: {\n // autoresize(state) {\n // void (state)\n // return false\n // },\n containerClass: () => \"netdata-container\",\n // create: window.NETDATA.textOnlyCreate,\n // enabled: true,\n format: \"array\",\n // initialized: true,\n // initialize(callback) {\n // callback()\n // },\n hasLegend: () => false,\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n options: () => \"absolute\",\n pixelsPerPoint: () => 3,\n trackColors: false,\n // update: window.NETDATA.textOnlyUpdate,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n },\n groupbox: {\n containerClass: () => \"netdata-container\",\n hasLegend: () => false,\n options: () => \"absolute\",\n format: \"json\",\n trackColors: false,\n pixelsPerPoint: () => 3,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n },\n}\n","import { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\n\nexport const getChartURLOptions = (\n attributes: Attributes, shouldEliminateZeroDimensions: boolean,\n) => {\n const {\n appendOptions,\n overrideOptions,\n } = attributes\n let ret = \"\"\n\n ret += overrideOptions\n ? overrideOptions.toString()\n : chartLibrariesSettings[attributes.chartLibrary].options(attributes)\n\n if (typeof appendOptions === \"string\") {\n ret += `|${encodeURIComponent(appendOptions)}`\n }\n\n ret += \"|jsonwrap\"\n\n if (shouldEliminateZeroDimensions) {\n ret += \"|nonzero\"\n }\n\n if (attributes.dimensionsAggrMethod === \"sum-of-abs\"\n || (!attributes.dimensionsAggrMethod && attributes.groupBy && attributes.groupBy !== \"dimension\")\n ) {\n ret += \"|absolute\"\n }\n\n return ret\n}\n","export const BIGGEST_INTERVAL_NUMBER = 2 ** 31 - 1\n","import React from \"react\"\n\nimport { Icon } from \"components/icon\"\n\ninterface Props {\n containerNode: HTMLElement\n hasEmptyData: boolean\n}\n\nexport const Loader = ({\n containerNode,\n hasEmptyData,\n}: Props) => {\n // below is 90% of original logic.\n // since it rerenders when IntersectionObserver turns the chart back on,\n // it's not that important to detect screen height and container sizes changes\n const screenHeight = window.screen.height\n\n // normally we want a font size, as tall as the element\n let h = containerNode.clientHeight\n\n // but give it some air, 20% let's say, or 5 pixels min\n const lost = Math.max(h * 0.2, 5)\n h -= lost\n\n // center the text, vertically\n let paddingTop = (lost - 5) / 2\n\n // but check the width too\n // it should fit 10 characters in it\n const w = containerNode.clientWidth / 10\n if (h > w) {\n paddingTop += (h - w) / 2\n h = w\n }\n\n // and don't make it too huge\n // 5% of the screen size is good\n if (h > screenHeight / 20) {\n paddingTop += (h - (screenHeight / 20)) / 2\n h = screenHeight / 20\n }\n\n const label = hasEmptyData ? \" empty\" : \" netdata\"\n const iconType = hasEmptyData ? \"noData\" : \"loading\"\n\n return (\n <div\n className=\"netdata-message icon\"\n style={{\n fontSize: h,\n paddingTop,\n }}\n >\n <Icon iconType={iconType} />\n {label}\n </div>\n )\n}\n","type GetPanAndZoomStep = (event: React.MouseEvent) => number\nexport const getPanAndZoomStep: GetPanAndZoomStep = (event) => {\n if (event.ctrlKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_control\n } if (event.shiftKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_shift\n } if (event.altKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_alt\n }\n return window.NETDATA.options.current.pan_and_zoom_factor\n}\n","export const safeEqualCheck = (a: unknown, b: unknown) => {\n if (a === b) {\n return true\n }\n return Number.isNaN(a as number) && Number.isNaN(b as number)\n}\n","import { identity } from \"ramda\"\nimport {\n useCallback, useState, useMemo, useRef,\n} from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTemperatureSetting, selectSecondsAsTimeSetting } from \"domains/global/selectors\"\nimport { unitsConversionCreator } from \"utils/units-conversion\"\nimport { safeEqualCheck } from \"utils/safe-equal-check\"\n\nimport { ChartData } from \"../chart-types\"\nimport { Attributes } from \"./transformDataAttributes\"\n\ntype Converter = (v: number) => number | string\n// only time units are converted into strings, the rest are numbers\n\n// todo - memoization similar to the one as in old dashboard, but probably not needed\nconst formattersFixed: any[] = []\nconst formattersZeroBased: any[] = []\nconst fastNumberFormat = (min: number, max: number) => {\n const key = max\n if (min === max) {\n if (typeof formattersFixed[key] === \"undefined\") {\n formattersFixed[key] = new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n }\n\n return formattersFixed[key]\n } if (min === 0) {\n if (typeof formattersZeroBased[key] === \"undefined\") {\n formattersZeroBased[key] = new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n }\n\n return formattersZeroBased[key]\n }\n // (old dashboard comment)\n // this is never used\n // it is added just for completeness\n return new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n}\n\nconst getLegendFormatValue = (\n convertUnits: Converter, intlNumberFormat: Intl.NumberFormat | null, valueDecimalDetail: number,\n) => (value: number | string | null) => {\n if (typeof value !== \"number\") {\n return \"-\"\n }\n\n const convertedValue = convertUnits(value)\n if (typeof convertedValue !== \"number\") {\n return convertedValue\n }\n\n if (intlNumberFormat !== null) {\n return intlNumberFormat.format(convertedValue)\n }\n\n let dmin\n let dmax\n if (valueDecimalDetail !== -1) {\n dmin = valueDecimalDetail\n dmax = valueDecimalDetail\n } else {\n dmin = 0\n const abs = (convertedValue < 0) ? -convertedValue : convertedValue\n if (abs > 1000) {\n dmax = 0\n } else if (abs > 10) {\n dmax = 1\n } else if (abs > 1) {\n dmax = 2\n } else if (abs > 0.1) {\n dmax = 2\n } else if (abs > 0.01) {\n dmax = 4\n } else if (abs > 0.001) {\n dmax = 5\n } else if (abs > 0.0001) {\n dmax = 6\n } else {\n dmax = 7\n }\n }\n\n return fastNumberFormat(dmin, dmax).format(convertedValue)\n}\n\ntype LegendFormatValue = (value: string | number | null) => string | number\n\ninterface Arguments {\n attributes: Attributes,\n data: ChartData,\n units: string,\n unitsCommon: string | undefined,\n unitsDesired: string,\n uuid: string,\n}\nexport const useFormatters = ({\n attributes,\n data,\n units,\n unitsCommon,\n unitsDesired,\n uuid,\n}: Arguments) => {\n const temperatureSetting = useSelector(selectTemperatureSetting)\n const secondsAsTimeSetting = useSelector(selectSecondsAsTimeSetting)\n\n // previously _unitsConversion\n const [convertUnits, setConvertUnits] = useState<Converter>(() => identity)\n\n // probably can also be removed\n const [min, setMin] = useState<number>()\n const [max, setMax] = useState<number>()\n\n // todo most of this state is not needed, that hook can be refractored\n const [unitsCurrent, setUnitsCurrent] = useState<string>(units)\n\n const [decimals, setDecimals] = useState<number>(-1)\n const [intlNumberFormat, setIntlNumberFormat] = useState<Intl.NumberFormat | null>(null)\n\n const {\n // \"valueDecimalDetail\" in old app\n decimalDigits = -1,\n } = attributes\n\n\n const legendFormatValue: LegendFormatValue = useMemo(() => (\n getLegendFormatValue(\n convertUnits, intlNumberFormat, decimalDigits,\n )\n ), [convertUnits, decimalDigits, intlNumberFormat])\n\n\n const legendFormatValueRef = useRef(legendFormatValue)\n const updateLegendFormatValueRef = (\n newConvertUnits: Converter, newIntlNumberFormat: any, newDecimalDigits: any,\n ) => {\n legendFormatValueRef.current = getLegendFormatValue(\n newConvertUnits, newIntlNumberFormat, newDecimalDigits,\n )\n }\n\n const legendFormatValueDecimalsFromMinMax = useCallback((newMin: number, newMax: number) => {\n if (safeEqualCheck(min, newMin) && safeEqualCheck(max, newMax)) {\n return legendFormatValueRef.current\n }\n // we should call the convertUnits-creation only when original app was doing this\n // so we don't get new updates in improper places\n setMin(newMin)\n setMax(newMax)\n\n const newConvertUnits = unitsConversionCreator.get(\n uuid, newMin, newMax, units, unitsDesired, unitsCommon,\n (switchedUnits) => {\n setUnitsCurrent(switchedUnits)\n // that.legendSetUnitsString(that.units_current);\n // that.legendSetUnitsString just populates some DOM with unitsCurrent\n // on all occurences just take the unitsCurrent from this state\n }, temperatureSetting, secondsAsTimeSetting,\n )\n\n // as function, so useState() interpretes it properly\n setConvertUnits(() => newConvertUnits)\n\n const convertedMin = newConvertUnits(newMin)\n const convertedMax = newConvertUnits(newMax)\n\n if (typeof convertedMin !== \"number\" || typeof convertedMax !== \"number\") {\n updateLegendFormatValueRef(newConvertUnits, intlNumberFormat, decimalDigits)\n return legendFormatValueRef.current\n }\n\n let newDecimals\n\n if (data.min === data.max) {\n // it is a fixed number, let the visualizer decide based on the value\n newDecimals = -1\n } else if (decimalDigits !== -1) {\n // there is an override\n newDecimals = decimalDigits\n } else {\n // ok, let's calculate the proper number of decimal points\n let delta\n\n if (convertedMin === convertedMax) {\n delta = Math.abs(convertedMin)\n } else {\n delta = Math.abs(convertedMax - convertedMin)\n }\n\n if (delta > 1000) {\n newDecimals = 0\n } else if (delta > 10) {\n newDecimals = (1)\n } else if (delta > 1) {\n newDecimals = 2\n } else if (delta > 0.1) {\n newDecimals = 2\n } else if (delta > 0.01) {\n newDecimals = 4\n } else if (delta > 0.001) {\n newDecimals = 5\n } else if (delta > 0.0001) {\n newDecimals = 6\n } else {\n newDecimals = 7\n }\n }\n\n\n let newIntlNumberFormat = intlNumberFormat\n\n if (newDecimals !== decimals) {\n if (newDecimals < 0) {\n newIntlNumberFormat = null\n } else {\n newIntlNumberFormat = fastNumberFormat(\n newDecimals,\n newDecimals,\n )\n }\n setIntlNumberFormat(() => newIntlNumberFormat)\n setDecimals(newDecimals)\n }\n updateLegendFormatValueRef(newConvertUnits, newIntlNumberFormat, newDecimals)\n return legendFormatValueRef.current\n }, [\n decimals, decimalDigits, min, max, uuid, temperatureSetting,\n units, unitsDesired, unitsCommon, secondsAsTimeSetting,\n data.min, data.max, intlNumberFormat,\n ])\n\n\n return {\n legendFormatValue,\n legendFormatValueDecimalsFromMinMax,\n unitsCurrent,\n }\n}\n","const defaultColor = {\n r: 255,\n g: 0,\n b: 0,\n}\n\ntype ColorHex2Rgb = (hex: string) => {\n r: number,\n g: number,\n b: number\n}\nexport const colorHex2Rgb: ColorHex2Rgb = (hex) => {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\n if (!hex) {\n return defaultColor\n }\n const hexFull = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b)\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexFull)\n if (!result) {\n console.warn(\"wrong color format:\", hex) // eslint-disable-line no-console\n }\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : defaultColor\n}\n","import styled from \"styled-components\"\nimport { getSizeBy } from \"@netdata/netdata-ui\"\n\nexport const LegendContainer = styled.div`\n margin-bottom: ${getSizeBy(3)};\n padding-left: 35px;\n`\n\nexport const LegendFirstRow = styled.div`\n margin-top: 4px;\n display: flex;\n justify-content: space-between;\n`\n\nexport const LegendSecondRow = styled.div`\n margin-top: 4px;\n display: flex;\n justify-content: space-between;\n`\n\nexport const LegendUnit = styled.div`\n`\n\nexport const DateTimeSeparator = styled.span`\n margin: 0 3px;\n`\n\nexport const LegendItems = styled.div`\n display: flex;\n flex-wrap: wrap;\n overflow: auto;\n max-height: 80px;\n`\n\nexport const DimensionItem = styled.div<{ color: string, isDisabled: boolean }>`\n display: flex;\n align-items: center;\n color: ${({ color }) => color};\n margin-right: 12px;\n cursor: pointer;\n opacity: ${({ isDisabled }) => (isDisabled ? 0.3 : null)};\n user-select: none;\n font-size: 11px;\n &:focus {\n outline: none;\n }\n`\n\n// toolbox is based on \"absolute\", so to make sure it's not put on top of dimension-item\n// let's put a transparent block as last in dimension-items container. Toolbox will soon be moved\n// to other place so it's temporary\nexport const DimensionItemToolboxPlaceholder = styled.div`\n width: 140px;\n height: 20px;\n`\n\nexport const DimensionIcon = styled.div<{ color: string }>`\n width: 14px;\n height: 7px;\n border-radius: 4px;\n overflow: hidden;\n background-color: ${({ color }) => color};\n`\n\nexport const DimensionLabel = styled.span`\n margin-left: 3px;\n`\n\nexport const DimensionValue = styled.span`\n margin-left: 5px;\n min-width: 30px;\n`\n\nexport const ToolboxContainer = styled.div`\n position: relative;\n touch-action: none;\n`\n","import React, { useCallback } from \"react\"\nimport { createSelector } from \"reselect\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { DimensionLabel } from \"./chart-legend-bottom.styled\"\n\nconst emptyObject = {}\n\nconst selector = createSelector(\n selectChartData,\n ({ dimension_names: dimensionNames, keys = emptyObject }) => ({\n dimensionNames,\n keys,\n })\n)\n\nconst LegendText = ({ id, index }) => {\n const { dimensionNames, keys } = useSelector(useCallback(state => selector(state, { id }), [id]))\n const { chart, node } = keys\n\n if (chart && node && Object.keys(keys).length === 2) {\n return (\n <DimensionLabel>\n {chart[index]}@{node[index]}\n </DimensionLabel>\n )\n }\n\n const name = dimensionNames[index]\n\n return <DimensionLabel>{name}</DimensionLabel>\n}\n\nexport default LegendText\n","import React, { Fragment, useRef, useEffect, useCallback } from \"react\"\nimport classNames from \"classnames\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nimport { colorHex2Rgb } from \"utils/color-hex-2-rgb\"\nimport { useDateTime } from \"utils/date-time\"\n\nimport { legendResolutionTooltip, legendPluginModuleString } from \"../utils/legend-utils\"\n\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\n\ninterface Props {\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => (number | string)\n onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n selectedDimensions: string[]\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n}\n\nexport const ChartLegendRight = ({\n chartUuid,\n chartMetadata,\n chartLibrary,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n onDimensionClick,\n selectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n}: Props) => {\n const chartData = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n )\n const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n // todo handle also this case:\n // const netdataLast = chartData.last_entry * 1000\n // const dataUpdateEvery = chartData.view_update_every * 1000\n // showUndefined = Math.abs(netdataLast - viewBefore) > dataUpdateEvery\n // (showUndefined also when difference between last and before is bigger than granularity)\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n // todo support timezone\n const legendDate = new Date(hoveredX || viewBefore)\n\n // todo make a possibility to add chartLegened when there's not chartData\n // (if this situation is possible)\n\n // @ts-ignore ignoring because options.current has inconsistent structure\n const colorFillOpacity = window.NETDATA.options.current[\n `color_fill_opacity_${chartMetadata.chart_type}`\n ]\n\n const { localeDateString, localeTimeString } = useDateTime()\n\n const scrollbarRef = useRef(null)\n useEffect(() => {\n if (scrollbarRef.current) {\n window.Ps.initialize(scrollbarRef.current, {\n wheelSpeed: 0.2,\n wheelPropagation: true,\n swipePropagation: true,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n useBothWheelAxes: false,\n suppressScrollX: true,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n theme: \"default\",\n })\n }\n }, [scrollbarRef])\n\n return (\n <div className={classNames(\n \"netdata-chart-legend\",\n `netdata-${chartLibrary}-legend`,\n )}\n >\n <span\n className=\"netdata-legend-title-date\"\n title={legendPluginModuleString(true, chartMetadata)}\n >\n {showUndefined\n ? legendPluginModuleString(false, chartMetadata)\n : localeDateString(legendDate)}\n </span>\n <br />\n <span\n className=\"netdata-legend-title-time\"\n title={legendResolutionTooltip(chartData, chartMetadata)}\n >\n {showUndefined\n ? chartMetadata.context.toString()\n : localeTimeString(legendDate)}\n </span>\n <br />\n <span className=\"netdata-legend-title-units\">{unitsCurrent}</span>\n <br />\n <div className=\"netdata-legend-series\" ref={scrollbarRef}>\n <div className=\"netdata-legend-series-content\">\n {dimensionIds.map((dimensionId, i) => {\n const dimensionName = dimensionNames[i]\n // todo dimension could be a separate component\n const color = colors[dimensionName]\n const rgb = colorHex2Rgb(color)\n\n const isSelected = selectedDimensions.length === 0\n || selectedDimensions.includes(dimensionName)\n\n let value\n if (showUndefined) {\n value = null\n } else if (hoveredRow !== -1) {\n const hoveredValueArray = chartData.result.data[hoveredRow]\n // [timestamp, valueDim1, valueDim2, ...]\n value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n } else {\n value = chartData.view_latest_values[i]\n }\n\n return (\n <Fragment key={dimensionId}>\n {i !== 0 && <br />}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n title={dimensionName}\n className={classNames(\n \"netdata-legend-name\",\n isSelected ? \"selected\" : \"not-selected\",\n )}\n onClick={(event) => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n style={{ color }}\n tabIndex={0}\n >\n <table\n className={`netdata-legend-name-table-${chartMetadata.chart_type}`}\n style={{\n backgroundColor: `rgba(${rgb.r},${rgb.g},${rgb.b},${colorFillOpacity})`,\n }}\n >\n <tbody>\n <tr className=\"netdata-legend-name-tr\">\n <td className=\"netdata-legend-name-td\" />\n </tr>\n </tbody>\n </table>\n {\" \"}\n <LegendText id={chartUuid} index={i} />\n </span>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n title={dimensionName}\n className={classNames(\n \"netdata-legend-value\",\n !isSelected && \"hidden\",\n )}\n onClick={(event) => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n style={{ color }} // omitted !important during refractor, react doesn't support it\n tabIndex={0}\n >\n {legendFormatValue(\n value,\n )}\n </span>\n </Fragment>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useCallback } from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { legendPluginModuleString, legendResolutionTooltip } from \"domains/chart/utils/legend-utils\"\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\nimport * as S from \"./chart-legend-bottom.styled\"\ninterface Props {\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => number | string\n onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n selectedDimensions: string[]\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n legendToolbox: JSX.Element\n resizeHandler: React.ReactNode\n}\n\nexport const ChartTimeframe = ({\n chartMetadata,\n showUndefined,\n hoveredX,\n viewBefore,\n chartData,\n}: any) => {\n const { localeDateString, localeTimeString } = useDateTime()\n\n const legendDate = new Date(hoveredX || viewBefore)\n\n return (\n <div>\n <span title={legendPluginModuleString(true, chartMetadata)}>\n {showUndefined\n ? legendPluginModuleString(false, chartMetadata)\n : localeDateString(legendDate)}\n </span>\n <S.DateTimeSeparator>|</S.DateTimeSeparator>\n <span title={legendResolutionTooltip(chartData, chartMetadata)}>\n {showUndefined ? chartMetadata.context.toString() : localeTimeString(legendDate)}\n </span>\n </div>\n )\n}\n\nexport const ChartLegendBottom = ({\n chartUuid,\n chartMetadata,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n onDimensionClick,\n selectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n legendToolbox,\n resizeHandler,\n}: Props) => {\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n const chartData = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n )\n const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n return (\n <S.LegendContainer>\n <S.LegendFirstRow>\n <S.LegendUnit>{unitsCurrent}</S.LegendUnit>\n <ChartTimeframe\n chartMetadata={chartMetadata}\n showUndefined={showUndefined}\n hoveredX={hoveredX}\n viewBefore={viewBefore}\n chartData={chartData}\n />\n </S.LegendFirstRow>\n <S.LegendSecondRow>\n <S.LegendItems>\n {dimensionIds.map((dimensionId, i) => {\n const dimensionName = dimensionNames[i]\n const color = colors[dimensionName]\n\n const isSelected =\n selectedDimensions.length === 0 || selectedDimensions.includes(dimensionName)\n\n let value\n if (showUndefined) {\n value = null\n } else if (hoveredRow !== -1) {\n const hoveredValueArray = chartData.result.data[hoveredRow]\n // [timestamp, valueDim1, valueDim2, ...]\n value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n } else {\n value = chartData.view_latest_values[i]\n }\n return (\n <S.DimensionItem\n color={color}\n onClick={event => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n tabIndex={0}\n isDisabled={!isSelected}\n key={dimensionId}\n >\n <S.DimensionIcon title={dimensionName} color={color} />\n <LegendText id={chartUuid} index={i} />\n <S.DimensionValue>{isSelected && legendFormatValue(value)}</S.DimensionValue>\n </S.DimensionItem>\n )\n })}\n <S.DimensionItemToolboxPlaceholder />\n </S.LegendItems>\n <S.ToolboxContainer>\n {legendToolbox}\n {resizeHandler}\n </S.ToolboxContainer>\n </S.LegendSecondRow>\n </S.LegendContainer>\n )\n}\n","import React, { useCallback } from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { getNewSelectedDimensions } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../chart-types\"\n\nimport { ChartLegendRight } from \"./chart-legend-right\"\nimport { ChartLegendBottom } from \"./chart-legend-bottom\"\n\ninterface Props {\n attributes: Attributes\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => number | string\n selectedDimensions: string[]\n setSelectedDimensions: (selectedDimensions: string[]) => void\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n legendToolbox: JSX.Element\n resizeHandler: React.ReactNode\n}\n\nexport const ChartLegend = ({\n attributes,\n chartUuid,\n chartMetadata,\n chartLibrary,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n selectedDimensions,\n setSelectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n legendToolbox,\n resizeHandler,\n}: Props) => {\n const dimension_names = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }).dimension_names, [\n chartUuid,\n ])\n )\n\n const onDimensionClick = (clickedDimensionName: string, event: React.MouseEvent) => {\n event.preventDefault()\n const isModifierKeyPressed = event.shiftKey || event.ctrlKey\n const newSelectedDimensions = getNewSelectedDimensions({\n allDimensions: dimension_names,\n selectedDimensions,\n clickedDimensionName,\n isModifierKeyPressed,\n })\n setSelectedDimensions(newSelectedDimensions)\n }\n\n if (attributes.legendPosition === \"bottom\") {\n return (\n <ChartLegendBottom\n chartUuid={chartUuid}\n chartLibrary={chartLibrary}\n chartMetadata={chartMetadata}\n colors={colors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n legendFormatValue={legendFormatValue}\n onDimensionClick={onDimensionClick}\n selectedDimensions={selectedDimensions}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewBefore={viewBefore}\n legendToolbox={legendToolbox}\n resizeHandler={resizeHandler}\n />\n )\n }\n\n return (\n <ChartLegendRight\n chartUuid={chartUuid}\n chartLibrary={chartLibrary}\n chartMetadata={chartMetadata}\n colors={colors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n legendFormatValue={legendFormatValue}\n onDimensionClick={onDimensionClick}\n selectedDimensions={selectedDimensions}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewBefore={viewBefore}\n />\n )\n}\n","import React from \"react\"\n\nimport { ToolboxButton } from \"./toolbox-button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface Props {\n onToolboxLeftClick: ClickCallback\n onToolboxRightClick: ClickCallback\n onToolboxZoomInClick: ClickCallback\n onToolboxZoomOutClick: ClickCallback\n}\nexport const LegendToolbox = ({\n onToolboxLeftClick,\n onToolboxRightClick,\n onToolboxZoomInClick,\n onToolboxZoomOutClick,\n}: Props) => (\n <div className=\"netdata-legend-toolbox\">\n <ToolboxButton\n className=\"netdata-legend-toolbox-button\"\n onClick={onToolboxLeftClick}\n iconType=\"left\"\n popoverTitle=\"Pan Left\"\n popoverContent=\"Pan the chart to the left. You can also <b>drag it</b> with your mouse or your\n finger (on touch devices).<br/><small>Help can be disabled from the settings.</small>\"\n />\n <ToolboxButton\n className=\"netdata-legend-toolbox-button\"\n onClick={onToolboxRightClick}\n iconType=\"right\"\n popoverTitle=\"Pan Right\"\n popoverContent=\"Pan the chart to the right. You can also <b>drag it</b> with your mouse or\n your finger (on touch devices).<br/><small>Help can be disabled from the settings.</small>\"\n />\n <ToolboxButton\n className=\"netdata-legend-toolbox-button\"\n onClick={onToolboxZoomInClick}\n iconType=\"zoomIn\"\n popoverTitle=\"Chart Zoom In\"\n popoverContent=\"Zoom in the chart. You can also press SHIFT and select an area of the chart,\n or press SHIFT or ALT and use the mouse wheel or 2-finger touchpad scroll to zoom in or out.\n <br/><small>Help can be disabled from the settings.</small>\"\n />\n <ToolboxButton\n className=\"netdata-legend-toolbox-button\"\n onClick={onToolboxZoomOutClick}\n iconType=\"zoomOut\"\n popoverTitle=\"Chart Zoom Out\"\n popoverContent=\"Zoom out the chart. You can also press SHIFT or ALT and use the mouse wheel,\n or 2-finger touchpad scroll to zoom in or out.<br/><small>Help can be disabled from the\n settings.</small>\"\n />\n </div>\n)\n","/* eslint-disable no-nested-ternary */\nimport { always, memoizeWith } from \"ramda\"\nimport Color from \"color\"\n\nimport { ChartMetadata, DygraphData } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartLibraryConfig } from \"domains/chart/utils/chartLibrariesSettings\"\n\nexport const getDataForFakeStacked = (\n data: number[][],\n dimensionsVisibility: boolean[],\n): number[][] => data.map((point) => {\n const [timestamp, ...values] = point\n const rest: number[] = []\n let currentMin = 0\n let currentMax = 0\n values\n .map((value, i) => ({ isVisible: dimensionsVisibility[i], value }))\n // reverse because first dimensions should be \"on top\" (at least positive ones)\n .slice().reverse()\n .forEach(({ isVisible, value }) => {\n if (!isVisible) {\n rest.push(0) // push with value '0'. it won't be visible but needs to be present in array\n return\n }\n if (value >= 0) {\n currentMax += value\n rest.push(currentMax)\n } else {\n currentMin += value\n rest.push(currentMin)\n }\n })\n return [\n timestamp,\n ...rest,\n ]\n})\n\nconst isPercentage = (unit: string) => unit === \"percentage\"\n || unit === \"percent\"\n || unit.indexOf(\"%\") !== -1\n\nexport const getDygraphChartType = (\n attributes: Attributes, chartData: DygraphData, chartMetadata: ChartMetadata,\n chartSettings: ChartLibraryConfig,\n) => {\n const isLogScale = (chartSettings.isLogScale as ((a: Attributes) => boolean))(attributes)\n const {\n dygraphType: dygraphRequestedType = chartMetadata.chart_type,\n groupBy,\n } = attributes\n\n if (groupBy && groupBy !== \"dimension\" && isPercentage(chartMetadata.units)) {\n return \"line\"\n }\n\n // corresponds to state.tmp.dygraph_chart_type in old app\n let dygraphChartType = dygraphRequestedType\n if (dygraphChartType === \"stacked\" && chartData.dimensions === 1) {\n dygraphChartType = \"area\"\n }\n if (dygraphChartType === \"stacked\" && isLogScale) {\n dygraphChartType = \"area\"\n }\n return dygraphChartType\n}\n\nconst getBackgroundColor = memoizeWith(\n always(\"true\"),\n () => Color(window.NETDATA.themes.current.background),\n)\n// when in \"fakeStacked\" mode, we cannot use opacity for fill in charts, because the areas would\n// be visible under each other. So the darkening / whitening needs to be added directly to colors\n// (the colors are too saturated for areas and in stacked mode they were with 0.8 opacity)\nexport const transformColors = (colors: string[]) => (\n colors.map((color) => Color(color).mix(getBackgroundColor(), 0.2).hex())\n)\n\nexport const getDygraphFillAlpha = (\n isFakeStacked: boolean, dygraphChartType: string,\n) => (isFakeStacked\n ? window.NETDATA.options.current.color_fill_opacity_fake_stacked\n : dygraphChartType === \"stacked\"\n ? window.NETDATA.options.current.color_fill_opacity_stacked\n : window.NETDATA.options.current.color_fill_opacity_area)\n\n\n// https://github.com/danvk/dygraphs/blob/master/src/iframe-tarp.js#L1-L23\n// On mouseUp dygraphs put rectangles above all iframes so mouseUp can be properly intercepted.\n// this causes a problem with some analytics iframes that place themselves in regions where they\n// aren't visible anyway (for example hubspot iframe on Cloud), and this creates a problematic\n// horizontal scrollbar to appear. This function filters those \"rectangles\" (tarps) to omit\n// elements with unreachable \"left\" styles\nexport const hackDygraphIFrameTarps = (tarps: HTMLDivElement[]): HTMLDivElement[] => (\n tarps.filter((element: HTMLDivElement) => {\n const isOutsideReasonableViewport = Number(element.style.left.replace(\"px\", \"\")) > 10000\n if (isOutsideReasonableViewport) {\n element.parentNode!.removeChild(element)\n }\n return !isOutsideReasonableViewport\n })\n)\n","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable function-paren-newline */\n/* eslint-disable comma-dangle */\nimport React, { useRef, useCallback } from \"react\"\nimport { useToggle } from \"react-use\"\n\nconst useProceededChart = (\n chartRef: any,\n propsRef: any\n): [boolean, React.Ref<HTMLElement>, (g: Dygraph) => void] => {\n const [proceeded, toggleProceeded] = useToggle(false)\n\n const ref = useRef<HTMLElement>(null)\n\n const updatePosition = useCallback((g: Dygraph) => {\n const { x } = g.getArea()\n const distance = g.toDomXCoord(propsRef.current.chartData.first_entry * 1000)\n const hasProceeded = distance > x\n toggleProceeded(hasProceeded)\n\n if (hasProceeded && ref.current) {\n const { height } = chartRef.current.getBoundingClientRect()\n ref.current.style.left = `${x}px`\n ref.current.style.right = `calc(100% - ${distance}px)`\n ref.current.style.top = `${height / 2}px`\n }\n }, [])\n\n return [proceeded, ref, updatePosition]\n}\n\nexport default useProceededChart\n","import { useRef } from \"react\"\nimport { useToggle } from \"react-use\"\n\nconst badgeTopMargin = \"40px\"\n\nconst defaultPositionTo = (ref, x, position, topMargin) => {\n ref.current.style.left = `${x}px`\n ref.current.style.right = `calc(100% - ${position}px)`\n ref.current.style.top = topMargin\n}\n\nexport default () => {\n const [isRendered, toggleIsRendered] = useToggle(false)\n\n const ref = useRef(null)\n\n const updatePosition = (isVisible, g, position, positionTo = defaultPositionTo) => {\n if (!isVisible) {\n toggleIsRendered(false)\n return\n }\n\n if (ref.current) {\n toggleIsRendered(true)\n const { x } = g.getArea()\n\n positionTo(ref, x, position, badgeTopMargin)\n }\n }\n\n return [isRendered, ref, updatePosition]\n}\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst Container = styled.div`\n display: block;\n`\n\nconst ProceededChartDisclaimer = forwardRef((\n props: React.HTMLAttributes<HTMLElement>,\n ref: React.Ref<HTMLDivElement>,\n) => (\n <Container ref={ref} className=\"dygraph__history-tip\" data-testid=\"proceededChartDisclaimer\">\n <span className=\"dygraph__history-tip-content\">\n Want to extend your history of real-time metrics?\n <br />\n <a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-configure\">\n Configure Netdata&apos;s&nbsp;\n <b>history</b>\n </a>\n &nbsp;or use the&nbsp;\n <a href=\"https://learn.netdata.cloud/docs/agent/database/engine/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-engine\">DB engine</a>\n .\n </span>\n </Container>\n))\n\nexport default ProceededChartDisclaimer\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst backgroundColorMap = {\n WARNING: \"#FFF8E1\",\n CRITICAL: \"#FFEBEF\",\n CLEAR: \"#E5F5E8\",\n}\nexport const getBackgroundColor = (status) => backgroundColorMap[status] || null\n\nconst borderColorMap = {\n WARNING: \"#FFC300\",\n CRITICAL: \"#F59B9B\",\n CLEAR: \"#68C47D\",\n}\nexport const getBorderColor = (status) => borderColorMap[status] || null\n\nconst textColorMap = {\n WARNING: \"#536775\",\n CRITICAL: \"#FF4136\",\n CLEAR: \"#00AB44\",\n}\nexport const getColor = (status) => textColorMap[status] || null\n\nconst Container = styled.div`\n position: absolute;\n margin-right: 10px;\n overflow: hidden;\n pointer-events: none;\n direction: rtl;\n z-index: 10; // higher than chart\n`\n\nconst Badge = styled.div`\n display: inline-block;\n border-radius: 36px;\n padding: 2px 12px;\n background: ${({ background }) => background};\n border: 1px solid ${({ border }) => border};\n color: ${({ color }) => color};\n font-size: 12px;\n font-weight: 700;\n direction: ltr;\n white-space: nowrap;\n`\n\nexport default forwardRef((\n { isVisible, status, label },\n ref,\n) => (\n <Container ref={ref}>\n {isVisible && (\n <Badge\n background={getBackgroundColor(status)}\n border={getBorderColor(status)}\n color={getColor(status)}\n >\n {label}\n </Badge>\n )}\n </Container>\n))\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\nimport { getColor } from \"@netdata/netdata-ui\"\n\nconst Container = styled.div`\n position: absolute;\n margin-right: 10px;\n overflow: hidden;\n pointer-events: none;\n direction: rtl;\n z-index: 10;\n`\n\nconst Badge = styled.div`\n display: inline-block;\n border-radius: 36px;\n padding: 2px 12px;\n background: ${getColor(\"mainBackground\")};\n border: 1px solid ${getColor(\"border\")};\n color: ${getColor(\"text\")};\n font-size: 12px;\n font-weight: 700;\n direction: ltr;\n white-space: nowrap;\n`\n\nconst minTimeframe = 15\nconst maxTimeframe = 180\n\nconst getMissingTime = total => {\n if (total < minTimeframe) return \" (Select at least 15 sec)\"\n if (total > maxTimeframe) return \" (Select up to 180 sec)\"\n return \"\"\n}\n\nconst NeutralPill = forwardRef((\n { isVisible, before, after },\n ref,\n) => {\n const total = (before - after) / 1000\n return (\n <Container ref={ref}>\n {isVisible && (\n <Badge>\n {Math.round(total)} sec.{getMissingTime(total)}\n </Badge>\n )}\n </Container>\n )\n})\n\nexport default NeutralPill\n","//@ts-nocheck\nimport { sortBy, reverse } from \"ramda\"\nimport React, {\n useLayoutEffect, useRef, useCallback, useState,\n} from \"react\"\nimport classNames from \"classnames\"\nimport { useUpdateEffect, useUnmount, useMount } from \"react-use\"\n// this version is needed because it contains a fix for handling constant value in the chart\n// ie. https://github.com/danvk/dygraphs/pull/909\nimport Dygraph from \"vendor/dygraph-c91c859.min\"\nimport \"dygraphs/src-es5/extras/smooth-plotter\"\nimport ResizeObserver from \"resize-observer-polyfill\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { AppStateT } from \"store/app-state\"\nimport { DygraphArea, NetdataDygraph } from \"types/vendor-overrides\"\nimport { TimeRange } from \"types/common\"\nimport { useDateTime } from \"utils/date-time\"\nimport { debounce } from \"utils/debounce\"\nimport { hasHashParam } from \"utils/hash-utils\"\n\nimport {\n selectCommonMin,\n selectCommonMax,\n selectGlobalChartUnderlay,\n selectGlobalSelectionMaster,\n selectSmoothPlot,\n selectSyncPanAndZoom,\n selectSpacePanelTransitionEndIsActive,\n selectAlarm,\n selectTimezoneSetting\n} from \"domains/global/selectors\"\nimport {\n resetGlobalPanAndZoomAction, setCommonMaxAction, setCommonMinAction,\n setGlobalPauseAction, resetGlobalPauseAction\n} from \"domains/global/actions\"\n\nimport { resetChartPanAndZoomAction } from \"domains/chart/actions\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport {\n chartLibrariesSettings,\n ChartLibraryConfig,\n ChartLibraryName,\n} from \"../../utils/chartLibrariesSettings\"\nimport { ChartMetadata, DygraphData } from \"../../chart-types\"\nimport { selectResizeHeight } from \"../../selectors\"\n\nimport {\n getDygraphChartType, getDataForFakeStacked, transformColors, getDygraphFillAlpha,\n hackDygraphIFrameTarps,\n} from \"./dygraph/utils\"\nimport \"./dygraph-chart.css\"\n\nimport useProceededChart from \"../../hooks/use-proceeded-chart\"\nimport useDygraphBadge from \"../../hooks/useDygraphBadge\"\nimport ProceededChartDisclaimer from \"./proceeded-chart-disclaimer\"\nimport AlarmBadge, { getBorderColor } from \"./alarmBadge\"\nimport NeutralPill from \"./neutralPill\"\n\n// This is the threshold above which we assume chart shown duration has changed\nconst timeframeThreshold = 5000\nconst dygraphResizeDebounceTime = 500\n\ntype IsInRangeOfAvailableData = (props: {\n after: number, before: number, chartData: DygraphData,\n}) => boolean\nconst isInRangeOfAvailableData: IsInRangeOfAvailableData = ({ after, before, chartData }) => (\n after >= (chartData.first_entry * 1000) && before <= (chartData.last_entry * 1000)\n)\n\ninterface GetInitialDygraphOptions {\n attributes: Attributes,\n chartData: DygraphData,\n chartMetadata: ChartMetadata,\n chartSettings: ChartLibraryConfig,\n dimensionsVisibility: boolean[]\n hiddenLabelsElementId: string,\n isFakeStacked: boolean,\n orderedColors: string[],\n setMinMax: (minMax: TimeRange) => void\n shouldSmoothPlot: boolean,\n unitsCurrent: string,\n xAxisDateString: (d: Date) => string,\n xAxisTimeString: (d: Date) => string,\n}\nconst getInitialDygraphOptions = ({\n attributes,\n chartData,\n chartMetadata,\n chartSettings,\n dimensionsVisibility,\n hiddenLabelsElementId,\n isFakeStacked,\n orderedColors,\n setMinMax,\n shouldSmoothPlot,\n unitsCurrent,\n xAxisDateString,\n xAxisTimeString,\n}: GetInitialDygraphOptions) => {\n const isSparkline = attributes.dygraphTheme === \"sparkline\"\n const highlightCircleSize = isSparkline ? 3 : 4\n\n const isLogScale = (chartSettings.isLogScale as ((a: Attributes) => boolean))(attributes)\n const dygraphChartType = getDygraphChartType(attributes, chartData, chartMetadata, chartSettings)\n const {\n dygraphSmooth = dygraphChartType === \"line\"\n && !isSparkline,\n dygraphDrawAxis = true,\n legendPosition,\n } = attributes\n const isLegendOnBottom = legendPosition === \"bottom\"\n const {\n // destructuring with default values\n dygraphColors = orderedColors,\n dygraphRightGap = 5,\n dygraphShowRangeSelector = false,\n dygraphShowRoller = false,\n dygraphTitle = attributes.title || chartMetadata.title,\n dygraphTitleHeight = 19,\n dygraphLegend = \"always\",\n dygraphLabelsDiv = hiddenLabelsElementId,\n dygraphLabelsSeparateLine = true,\n dygraphIncludeZero = dygraphChartType === \"stacked\",\n dygraphShowZeroValues = true,\n dygraphShowLabelsOnHighLight = true,\n dygraphHideOverlayOnMouseOut = true,\n dygraphXRangePad = 0,\n dygraphYRangePad = 1,\n dygraphValueRange = [null, null],\n dygraphYLabelWidth = 12,\n // eslint-disable-next-line no-nested-ternary\n dygraphStrokeWidth = dygraphChartType === \"stacked\"\n ? 0.1\n : (dygraphSmooth === true\n ? 1.5\n : 0.7),\n\n dygraphStrokePattern,\n dygraphDrawPoints = false,\n dygraphDrawGapEdgePoints = true,\n dygraphConnectSeparatedPoints = false,\n dygraphPointSize = 1,\n dygraphStepPlot = false,\n dygraphStrokeBorderColor = window.NETDATA.themes.current.background,\n dygraphStrokeBorderWidth = 0,\n dygraphFillGraph = (dygraphChartType === \"area\" || dygraphChartType === \"stacked\"),\n dygraphFillAlpha = getDygraphFillAlpha(isFakeStacked, dygraphChartType),\n dygraphStackedGraph = dygraphChartType === \"stacked\" && !isFakeStacked,\n dygraphStackedGraphNanFill = \"none\",\n dygraphAxisLabelFontSize = 10,\n dygraphAxisLineColor = window.NETDATA.themes.current.axis,\n dygraphAxisLineWidth = 1.0,\n dygraphDrawGrid = true,\n dygraphGridLinePattern,\n dygraphGridLineWidth = 1.0,\n dygraphGridLineColor = window.NETDATA.themes.current.grid,\n dygraphMaxNumberWidth = 8,\n dygraphSigFigs,\n dygraphDigitsAfterDecimal = 2,\n dygraphHighlighCircleSize = highlightCircleSize,\n dygraphHighlightSeriesOpts,\n dygraphHighlightSeriesBackgroundAlpha,\n\n dygraphXPixelsPerLabel = 50,\n dygraphXAxisLabelWidth = 60,\n dygraphDrawXAxis = dygraphDrawAxis,\n dygraphYPixelsPerLabel = 15,\n dygraphYAxisLabelWidth = isLegendOnBottom ? 30 : 50,\n dygraphDrawYAxis = dygraphDrawAxis,\n } = attributes\n return {\n colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n\n // leave a few pixels empty on the right of the chart\n rightGap: isSparkline ? 0 : dygraphRightGap,\n showRangeSelector: dygraphShowRangeSelector,\n showRoller: dygraphShowRoller,\n title: isSparkline ? undefined : dygraphTitle,\n titleHeight: dygraphTitleHeight,\n legend: dygraphLegend, // we need this to get selection events\n labels: chartData.result.labels,\n labelsDiv: dygraphLabelsDiv,\n\n labelsSeparateLines: isSparkline ? true : dygraphLabelsSeparateLine,\n labelsShowZeroValues: isLogScale ? false : dygraphShowZeroValues,\n labelsKMB: false,\n labelsKMG2: false,\n showLabelsOnHighlight: dygraphShowLabelsOnHighLight,\n hideOverlayOnMouseOut: dygraphHideOverlayOnMouseOut,\n includeZero: dygraphIncludeZero,\n xRangePad: dygraphXRangePad,\n yRangePad: isSparkline ? 1 : dygraphYRangePad,\n valueRange: dygraphValueRange,\n ylabel: (isSparkline || isLegendOnBottom) ? undefined : unitsCurrent,\n yLabelWidth: (isSparkline || isLegendOnBottom) ? 0 : dygraphYLabelWidth,\n\n // the function to plot the chart\n plotter: (dygraphSmooth && shouldSmoothPlot) ? window.smoothPlotter : null,\n\n // The width of the lines connecting data points.\n // This can be used to increase the contrast or some graphs.\n strokeWidth: dygraphStrokeWidth,\n strokePattern: dygraphStrokePattern,\n\n // The size of the dot to draw on each point in pixels (see drawPoints).\n // A dot is always drawn when a point is \"isolated\",\n // i.e. there is a missing point on either side of it.\n // This also controls the size of those dots.\n drawPoints: dygraphDrawPoints,\n\n // Draw points at the edges of gaps in the data.\n // This improves visibility of small data segments or other data irregularities.\n drawGapEdgePoints: dygraphDrawGapEdgePoints,\n connectSeparatedPoints: isLogScale ? false : dygraphConnectSeparatedPoints,\n pointSize: dygraphPointSize,\n\n // enabling this makes the chart with little square lines\n stepPlot: dygraphStepPlot,\n\n // Draw a border around graph lines to make crossing lines more easily\n // distinguishable. Useful for graphs with many lines.\n strokeBorderColor: dygraphStrokeBorderColor,\n strokeBorderWidth: dygraphStrokeBorderWidth,\n fillGraph: dygraphFillGraph,\n fillAlpha: dygraphFillAlpha,\n stackedGraph: dygraphStackedGraph,\n stackedGraphNaNFill: dygraphStackedGraphNanFill,\n drawAxis: isSparkline ? false : dygraphDrawAxis,\n axisLabelFontSize: dygraphAxisLabelFontSize,\n axisLineColor: dygraphAxisLineColor,\n axisLineWidth: dygraphAxisLineWidth,\n drawGrid: isSparkline ? false : dygraphDrawGrid,\n gridLinePattern: dygraphGridLinePattern,\n gridLineWidth: dygraphGridLineWidth,\n gridLineColor: dygraphGridLineColor,\n maxNumberWidth: dygraphMaxNumberWidth,\n sigFigs: dygraphSigFigs,\n digitsAfterDecimal: dygraphDigitsAfterDecimal,\n highlightCircleSize: dygraphHighlighCircleSize,\n highlightSeriesOpts: dygraphHighlightSeriesOpts, // TOO SLOW: { strokeWidth: 1.5 },\n // TOO SLOW: (state.tmp.dygraph_chart_type === 'stacked')?0.7:0.5,\n highlightSeriesBackgroundAlpha: dygraphHighlightSeriesBackgroundAlpha,\n visibility: dimensionsVisibility,\n logscale: isLogScale,\n\n axes: {\n x: {\n pixelsPerLabel: dygraphXPixelsPerLabel,\n // unsufficient typings for Dygraph\n // @ts-ignore\n ticker: Dygraph.dateTicker,\n axisLabelWidth: dygraphXAxisLabelWidth,\n drawAxis: isSparkline ? false : dygraphDrawXAxis,\n axisLabelFormatter: (d: Date | number) => ((d as Date).toTimeString().startsWith(\"00:00:00\")\n ? xAxisDateString(d as Date)\n : xAxisTimeString(d as Date)\n ),\n },\n y: {\n logscale: isLogScale,\n pixelsPerLabel: dygraphYPixelsPerLabel,\n axisLabelWidth: dygraphYAxisLabelWidth,\n drawAxis: isSparkline ? false : dygraphDrawYAxis,\n // axisLabelFormatter is added on the updates\n axisLabelFormatter(y: Date | number) {\n const formatter = setMinMax([\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n this.axes_[0].extremeRange[0],\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n this.axes_[0].extremeRange[1],\n ]) as unknown as ((value: Date | number) => string)\n return formatter(y as number)\n },\n },\n },\n }\n}\n\ninterface Props {\n attributes: Attributes\n chartData: DygraphData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n chartLibrary: ChartLibraryName\n chartUuid: string\n colors: {\n [key: string]: string\n }\n dimensionsVisibility: boolean[]\n hasEmptyData: boolean\n hasLegend: boolean\n isRemotelyControlled: boolean\n onUpdateChartPanAndZoom: (arg: {\n after: number, before: number,\n callback: (after: number, before: number) => void,\n masterID: string,\n shouldNotExceedAvailableRange: boolean,\n }) => void\n orderedColors: string[]\n immediatelyDispatchPanAndZoom: () => void\n\n hoveredRow: number\n hoveredX: number | null\n setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n setMinMax: (minMax: TimeRange) => void\n unitsCurrent: string\n viewAfter: number\n viewBefore: number\n}\nexport const DygraphChart = ({\n attributes,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n chartLibrary,\n // colors,\n chartUuid,\n dimensionsVisibility,\n hasEmptyData,\n hasLegend,\n isRemotelyControlled,\n onUpdateChartPanAndZoom,\n orderedColors,\n immediatelyDispatchPanAndZoom,\n\n hoveredRow,\n hoveredX,\n setGlobalChartUnderlay,\n setHoveredX,\n setMinMax,\n unitsCurrent,\n viewAfter,\n viewBefore,\n}: Props) => {\n const globalChartUnderlay = useSelector(selectGlobalChartUnderlay)\n const selectedAlarm = useSelector(selectAlarm)\n const alarm = selectedAlarm?.chartId === chartData.id ? selectedAlarm : null\n\n const timezone = useSelector(selectTimezoneSetting)\n\n const { xAxisDateString, xAxisTimeString } = useDateTime()\n const chartSettings = chartLibrariesSettings[chartLibrary]\n const hiddenLabelsElementId = `${chartUuid}-hidden-labels-id`\n\n const dygraphChartType = getDygraphChartType(attributes, chartData, chartMetadata, chartSettings)\n // isFakeStacked - is a special mode for displaying stacked charts with both positive and negative\n // values. Dygraph.js doesn't support it so in this case we need to sum the values manually\n // and display the chart as \"area\" type, but with keeping all styling (fill etc.) properties\n // as in \"stacked\" type\n // because first values need to be \"on top\" (at least for positive values), the dimension order\n // needs to be reversed (in getDataForFakeStacked function and when assigning dimension colors)\n const isFakeStacked = chartData.min < 0 && dygraphChartType === \"stacked\"\n const dygraphFillAlpha = getDygraphFillAlpha(isFakeStacked, dygraphChartType)\n\n const chartElement = useRef<HTMLDivElement>(null)\n\n const updateChartPanOrZoom = useCallback(({\n after, before,\n callback,\n shouldNotExceedAvailableRange,\n }) => {\n onUpdateChartPanAndZoom({\n after,\n before,\n callback,\n masterID: chartUuid,\n shouldNotExceedAvailableRange,\n })\n }, [chartUuid, onUpdateChartPanAndZoom])\n\n // keep in ref to prevent additional updates\n const dygraphInstance = useRef<Dygraph | null>()\n // state.tmp.dygraph_user_action in old dashboard\n const latestIsUserAction = useRef(false)\n // state.tmp.dygraph_mouse_down in old dashboard\n const isMouseDown = useRef(false)\n // state.tmp.dygraph_highlight_after in old dashboard\n const dygraphHighlightAfter = useRef<null | number>(null)\n // state.dygraph_last_touch_move in old dashboard\n const dygraphLastTouchMove = useRef(0)\n // state.dygraph_last_touch_page_x in old dashboard\n const dygraphLastTouchPageX = useRef(0)\n // state.dygraph_last_touch_end in old dashboard\n const dygraphLastTouchEnd = useRef<undefined | number>()\n\n const dispatch = useDispatch()\n const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n\n const resetGlobalPanAndZoom = useCallback(() => {\n latestIsUserAction.current = false // prevent starting panAndZoom\n if (dygraphInstance.current) {\n // todo on toolbox reset click, do updateOptions({ dateWindow: null })\n // (issue existed also before rewrite)\n dygraphInstance.current.updateOptions({\n // reset dateWindow to the current\n // @ts-ignore external typings dont support null\n dateWindow: null,\n })\n }\n\n if (isSyncPanAndZoom) {\n dispatch(resetGlobalPanAndZoomAction())\n } else {\n dispatch(resetChartPanAndZoomAction({ id: chartUuid }))\n }\n }, [chartUuid, dispatch, isSyncPanAndZoom])\n\n const [isAlarmBadgeVisible, alarmBadgeRef, updateAlarmBadge] = useDygraphBadge() as any\n const [isHighlightBadgeVisible, highlightBadgeRef, updateHighlightBadge] = useDygraphBadge() as any\n\n // setGlobalChartUnderlay is using state from closure (chartData.after), so we need to have always\n // the newest callback. Unfortunately we cannot use Dygraph.updateOptions() (library restriction)\n // for interactionModel callbacks so we need to keep the callback in mutable ref\n const propsRef = useRef({\n alarm,\n chartData,\n globalChartUnderlay,\n hoveredX,\n immediatelyDispatchPanAndZoom,\n // put it to ref to prevent additional updateOptions() after creating dygraph\n resetGlobalPanAndZoom,\n setGlobalChartUnderlay,\n updateAlarmBadge,\n updateHighlightBadge,\n updateChartPanOrZoom,\n viewAfter,\n viewBefore,\n })\n\n const [\n isProceeded, precededChartRef, updatePrecededPosition,\n ] = useProceededChart(chartElement, propsRef)\n\n useLayoutEffect(() => {\n propsRef.current.alarm = alarm\n propsRef.current.chartData = chartData\n propsRef.current.hoveredX = hoveredX\n propsRef.current.immediatelyDispatchPanAndZoom = immediatelyDispatchPanAndZoom\n propsRef.current.globalChartUnderlay = globalChartUnderlay\n propsRef.current.resetGlobalPanAndZoom = resetGlobalPanAndZoom\n propsRef.current.setGlobalChartUnderlay = setGlobalChartUnderlay\n propsRef.current.updateAlarmBadge = updateAlarmBadge\n propsRef.current.updateHighlightBadge = updateHighlightBadge\n propsRef.current.updateChartPanOrZoom = updateChartPanOrZoom\n propsRef.current.viewAfter = viewAfter\n propsRef.current.viewBefore = viewBefore\n }, [alarm, chartData, globalChartUnderlay, hoveredX, immediatelyDispatchPanAndZoom,\n resetGlobalPanAndZoom, setGlobalChartUnderlay, updateAlarmBadge, updateHighlightBadge, updateChartPanOrZoom, viewAfter, viewBefore])\n\n const [localHighlight, setLocalHighlight] = useState<{before?: number, after?: number} | null>(null)\n\n const shouldSmoothPlot = useSelector(selectSmoothPlot)\n useLayoutEffect(() => {\n if (chartElement && chartElement.current && !dygraphInstance.current && !hasEmptyData) {\n const dygraphOptionsStatic = getInitialDygraphOptions({\n attributes,\n chartData,\n chartMetadata,\n chartSettings,\n dimensionsVisibility,\n hiddenLabelsElementId,\n isFakeStacked,\n orderedColors,\n setMinMax,\n shouldSmoothPlot,\n unitsCurrent,\n xAxisDateString,\n xAxisTimeString,\n })\n\n latestIsUserAction.current = false\n\n const dygraphOptions = {\n ...dygraphOptionsStatic,\n // set dateWindow on init - this is needed when chart is globalPanAndZoom-master\n // and user scrolls down/up so the chart hides and then unhides. This causes the chart\n // to re-create, but the data has additional padding which should be outside of\n // visible range\n dateWindow: [propsRef.current.viewAfter, propsRef.current.viewBefore],\n\n highlightCallback(\n event: MouseEvent, xval: number,\n ) {\n // todo\n // state.pauseChart()\n\n const newHoveredX = isMouseDown.current\n ? null\n : xval\n\n const currentHoveredX = propsRef.current.hoveredX\n if (newHoveredX !== currentHoveredX) {\n setHoveredX(newHoveredX)\n }\n },\n\n unhighlightCallback() {\n // todo\n // state.unpauseChart();\n if (propsRef.current.hoveredX !== null) {\n setHoveredX(null)\n }\n },\n drawCallback(dygraph: Dygraph) {\n // the user has panned the chart and this is called to re-draw the chart\n // 1. refresh this chart by adding data to it\n // 2. notify all the other charts about the update they need\n\n // to prevent an infinite loop (feedback), we use\n // state.tmp.dygraph_user_action\n // - when true, this is initiated by a user\n // - when false, this is feedback\n\n if (latestIsUserAction.current) {\n latestIsUserAction.current = false\n const xRange = dygraph.xAxisRange()\n const after = Math.round(xRange[0])\n const before = Math.round(xRange[1])\n\n if (isInRangeOfAvailableData({\n after, before, chartData: propsRef.current.chartData,\n })) {\n propsRef.current.updateChartPanOrZoom({ after, before })\n }\n }\n },\n zoomCallback: (minDate: number, maxDate: number) => {\n latestIsUserAction.current = true\n propsRef.current.updateChartPanOrZoom({ after: minDate, before: maxDate })\n },\n\n underlayCallback(canvas: CanvasRenderingContext2D, area: DygraphArea, g: Dygraph) {\n updatePrecededPosition(g)\n\n if (propsRef.current.alarm) {\n const { alarm: currentAlarm } = propsRef.current\n\n const alarmPosition = g.toDomXCoord(currentAlarm.when * 1000)\n const fillColor = getBorderColor(currentAlarm.status)\n const horizontalPadding = 3\n // use RAF, because dygraph doesn't provide any callback called after drawing the chart\n requestAnimationFrame(() => {\n canvas.fillStyle = fillColor\n const globalAlphaCache = canvas.globalAlpha\n canvas.globalAlpha = 0.7\n canvas.fillRect(alarmPosition - horizontalPadding, area.y, 2 * horizontalPadding, area.h)\n canvas.globalAlpha = globalAlphaCache\n })\n\n propsRef.current.updateAlarmBadge(\n propsRef.current.alarm,\n g,\n alarmPosition - horizontalPadding,\n )\n }\n\n const onMetricsCorralation = hasHashParam(\"metrics_correlation\")\n if (onMetricsCorralation && propsRef.current.globalChartUnderlay) {\n const { before, masterID } = propsRef.current.globalChartUnderlay\n\n if (masterID && masterID !== propsRef.current.chartData.id) {\n propsRef.current.updateHighlightBadge(false)\n } else {\n const horizontalPadding = 3\n\n propsRef.current.updateHighlightBadge(\n true,\n g,\n g.toDomXCoord(before),\n (pillRef, pillX, pillPosition, topMargin) => {\n pillRef.current.style.left = `${pillPosition + horizontalPadding}px`\n pillRef.current.style.top = topMargin\n }\n )\n }\n } else {\n propsRef.current.updateHighlightBadge(false)\n }\n\n // the chart is about to be drawn\n // this function renders global highlighted time-frame\n\n if (propsRef.current.globalChartUnderlay) {\n const { after, before } = propsRef.current.globalChartUnderlay\n\n if (after < before) {\n const HIGHLIGHT_HORIZONTAL_PADDING = 20\n const bottomLeft = g.toDomCoords(after, -HIGHLIGHT_HORIZONTAL_PADDING)\n const topRight = g.toDomCoords(before, HIGHLIGHT_HORIZONTAL_PADDING)\n\n const left = bottomLeft[0]\n const right = topRight[0]\n\n // eslint-disable-next-line no-param-reassign\n canvas.fillStyle = window.NETDATA.themes.current.highlight\n canvas.fillRect(left, area.y, right - left, area.h)\n }\n }\n },\n\n // interactionModel cannot be replaced with updateOptions(). we need to keep all changing\n // values and callbacks in mutable ref,\n interactionModel: {\n mousedown(event: MouseEvent, dygraph: Dygraph, context: any) {\n // Right-click should not initiate anything.\n if (event.button && event.button === 2) {\n return\n }\n\n latestIsUserAction.current = true\n isMouseDown.current = true\n context.initializeMouseDown(event, dygraph, context)\n\n // limit problematic dygraph's feature, more info above the function\n // eslint-disable-next-line no-param-reassign\n context.tarp.tarps = hackDygraphIFrameTarps(context.tarp.tarps)\n\n dispatch(setGlobalPauseAction())\n\n if (event.button && event.button === 1) {\n // middle mouse button\n\n if (event.shiftKey) {\n // panning\n dygraphHighlightAfter.current = null\n // @ts-ignore\n Dygraph.startPan(event, dygraph, context)\n } else if (event.altKey || event.ctrlKey || event.metaKey) {\n // middle mouse button highlight\n dygraphHighlightAfter.current = dygraph.toDataXCoord(event.offsetX)\n // @ts-ignore\n Dygraph.startZoom(event, dygraph, context)\n } else {\n // middle mouse button selection for zoom\n dygraphHighlightAfter.current = null\n // @ts-ignore\n Dygraph.startZoom(event, dygraph, context)\n }\n } else if (event.shiftKey) {\n // left mouse button selection for zoom (ZOOM)\n dygraphHighlightAfter.current = null\n // @ts-ignore\n Dygraph.startZoom(event, dygraph, context)\n } else if (event.altKey || event.ctrlKey || event.metaKey) {\n // left mouse button highlight\n dygraphHighlightAfter.current = dygraph.toDataXCoord(event.offsetX)\n // @ts-ignore\n Dygraph.startZoom(event, dygraph, context)\n } else {\n // left mouse button dragging (PAN)\n dygraphHighlightAfter.current = null\n // @ts-ignore\n Dygraph.startPan(event, dygraph, context)\n }\n },\n\n mousemove(event: MouseEvent, dygraph: Dygraph, context: any) {\n // if (state.tmp.dygraph_highlight_after !== null) {\n // else if (\n if (dygraphHighlightAfter.current !== null) {\n // highlight selection\n latestIsUserAction.current = true\n // @ts-ignore\n Dygraph.moveZoom(event, dygraph, context)\n\n const onMetricsCorralation = hasHashParam(\"metrics_correlation\")\n if (onMetricsCorralation) {\n const before = dygraph.toDataXCoord(event.offsetX)\n const after = dygraphHighlightAfter.current\n if (before - after > 1000) { // more than a sec\n setLocalHighlight({\n after,\n before,\n })\n propsRef.current.updateHighlightBadge(\n true,\n dygraph,\n dygraph.toDomXCoord(before),\n (pillRef, pillX, pillPosition, topMargin) => {\n pillRef.current.style.left = `${pillPosition}px`\n pillRef.current.style.top = topMargin\n }\n )\n }\n }\n\n event.preventDefault()\n } else if (context.isPanning) {\n latestIsUserAction.current = true\n // eslint-disable-next-line no-param-reassign\n context.is2DPan = false\n // @ts-ignore\n Dygraph.movePan(event, dygraph, context)\n } else if (context.isZooming) {\n // @ts-ignore\n Dygraph.moveZoom(event, dygraph, context)\n }\n },\n\n mouseup(event: MouseEvent, dygraph: Dygraph, context: any) {\n isMouseDown.current = false\n if (dygraphHighlightAfter.current !== null) {\n const sortedRange = sortBy((x) => +x, [\n dygraphHighlightAfter.current,\n dygraph.toDataXCoord(event.offsetX),\n ])\n\n propsRef.current.setGlobalChartUnderlay({\n after: sortedRange[0],\n before: sortedRange[1],\n masterID: chartData.id,\n })\n dygraphHighlightAfter.current = null\n setLocalHighlight(null)\n // eslint-disable-next-line no-param-reassign\n context.isZooming = false\n\n // old dashboard code\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n dygraph.clearZoomRect_()\n // this call probably fixes the broken selection circle during highlighting\n // and forces underlayCallback to fire (and draw highlight-rect\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n dygraph.drawGraph_(false)\n } else if (context.isPanning) {\n\n latestIsUserAction.current = true\n // @ts-ignore\n Dygraph.endPan(event, dygraph, context)\n propsRef.current.immediatelyDispatchPanAndZoom()\n } else if (context.isZooming) {\n\n latestIsUserAction.current = true\n // @ts-ignore\n Dygraph.endZoom(event, dygraph, context)\n propsRef.current.immediatelyDispatchPanAndZoom()\n }\n },\n\n wheel(event: WheelEvent, dygraph: Dygraph) {\n // Take the offset of a mouse event on the dygraph canvas and\n // convert it to a pair of percentages from the bottom left.\n // (Not top left, bottom is where the lower value is.)\n function offsetToPercentage(g: Dygraph, offsetX: number, offsetY: number) {\n // This is calculating the pixel offset of the leftmost date.\n const xOffset = g.toDomXCoord(g.xAxisRange()[0])\n const yar0 = g.yAxisRange(0)\n\n // This is calculating the pixel of the highest value. (Top pixel)\n const yOffset = g.toDomYCoord(yar0[1])\n\n // x y w and h are relative to the corner of the drawing area,\n // so that the upper corner of the drawing area is (0, 0).\n const x = offsetX - xOffset\n const y = offsetY - yOffset\n\n // This is computing the rightmost pixel, effectively defining the\n // width.\n // const w = g.toDomCoords(g.xAxisRange()[1], null)[0] - xOffset\n const w = g.toDomXCoord(g.xAxisRange()[1]) - xOffset\n\n // This is computing the lowest pixel, effectively defining the height.\n // const h = g.toDomCoords(null, yar0[0])[1] - yOffset\n const h = g.toDomYCoord(yar0[0]) - yOffset\n\n // Percentage from the left.\n const xPct = w === 0 ? 0 : (x / w)\n // Percentage from the top.\n const yPct = h === 0 ? 0 : (y / h)\n\n // The (1-) part below changes it from \"% distance down from the top\"\n // to \"% distance up from the bottom\".\n return [xPct, (1 - yPct)]\n }\n\n function adjustAxis(axis: [number, number], zoomInPercentage: number, bias: number) {\n const delta = axis[1] - axis[0]\n const increment = delta * zoomInPercentage\n const foo = [increment * bias, increment * (1 - bias)]\n\n return [axis[0] + foo[0], axis[1] - foo[1]]\n }\n\n // Adjusts [x, y] toward each other by zoomInPercentage%\n // Split it so the left/bottom axis gets xBias/yBias of that change and\n // tight/top gets (1-xBias)/(1-yBias) of that change.\n //\n // If a bias is missing it splits it down the middle.\n function zoomRange(g: Dygraph, zoomInPercentage: number, xBias: number, yBias: number) {\n const yAxes = g.yAxisRanges()\n const newYAxes = []\n for (let i = 0; i < yAxes.length; i += 1) {\n newYAxes[i] = adjustAxis(yAxes[i], zoomInPercentage, (yBias || 0.5))\n }\n\n return adjustAxis(g.xAxisRange(), zoomInPercentage, (xBias || 0.5))\n }\n\n if (event.altKey || event.shiftKey) {\n latestIsUserAction.current = true\n\n // http://dygraphs.com/gallery/interaction-api.js\n let normalDef\n // @ts-ignore\n if (typeof event.wheelDelta === \"number\" && !Number.isNaN(event.wheelDelta)) {\n // chrome\n // @ts-ignore\n normalDef = event.wheelDelta / 40\n } else {\n // firefox\n normalDef = event.deltaY * -1.2\n }\n\n const normal = (event.detail) ? event.detail * -1 : normalDef\n const percentage = normal / 50\n\n const percentages = offsetToPercentage(dygraph, event.offsetX, event.offsetY)\n const xPct = percentages[0]\n const yPct = percentages[1]\n\n const [after, before] = zoomRange(dygraph, percentage, xPct, yPct)\n\n propsRef.current.updateChartPanOrZoom({\n after,\n before,\n shouldNotExceedAvailableRange: true,\n callback: (updatedAfter: number, updatedBefore: number) => {\n dygraph.updateOptions({\n dateWindow: [updatedAfter, updatedBefore],\n })\n },\n })\n\n event.preventDefault()\n }\n },\n\n click(event: MouseEvent) {\n event.preventDefault()\n },\n\n dblclick() {\n dispatch(resetGlobalPauseAction({ forcePlay: false }))\n propsRef.current.resetGlobalPanAndZoom()\n },\n\n touchstart(event: TouchEvent, dygraph: Dygraph, context: any) {\n isMouseDown.current = true\n latestIsUserAction.current = true\n\n // todo\n // state.pauseChart()\n\n Dygraph.defaultInteractionModel.touchstart(event, dygraph, context)\n\n // we overwrite the touch directions at the end, to overwrite\n // the internal default of dygraph\n // eslint-disable-next-line no-param-reassign\n context.touchDirections = { x: true, y: false }\n\n dygraphLastTouchMove.current = 0\n\n if (typeof event.touches[0].pageX === \"number\") {\n dygraphLastTouchPageX.current = event.touches[0].pageX\n } else {\n dygraphLastTouchPageX.current = 0\n }\n },\n touchmove(event: TouchEvent, dygraph: Dygraph, context: any) {\n latestIsUserAction.current = true\n Dygraph.defaultInteractionModel.touchmove(event, dygraph, context)\n\n dygraphLastTouchMove.current = Date.now()\n },\n\n touchend(event: TouchEvent, dygraph: Dygraph, context: any) {\n isMouseDown.current = false\n latestIsUserAction.current = true\n Dygraph.defaultInteractionModel.touchend(event, dygraph, context)\n\n // if it didn't move, it is a selection\n if (dygraphLastTouchMove.current === 0 && dygraphLastTouchPageX.current !== 0\n && chartElement.current // this is just for TS\n ) {\n latestIsUserAction.current = false // prevent updating pan-and-zoom\n // internal api of dygraph\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n const dygraphPlotter = dygraph.plotter_\n const pct = (dygraphLastTouchPageX.current - (\n dygraphPlotter.area.x + chartElement.current.getBoundingClientRect().left\n )) / dygraphPlotter.area.w\n\n const { current } = propsRef\n const t = Math.round(current.viewAfter\n + (current.viewBefore - current.viewAfter) * pct)\n // dont set \"master\" so the highlight is recalculated (to match existing row)\n setHoveredX(t, true)\n }\n\n // if it was double tap within double click time, reset the charts\n const now = Date.now()\n if (typeof dygraphLastTouchEnd.current !== \"undefined\") {\n if (dygraphLastTouchMove.current === 0) {\n const dt = now - dygraphLastTouchEnd.current\n if (dt <= window.NETDATA.options.current.double_click_speed) {\n propsRef.current.resetGlobalPanAndZoom()\n }\n }\n }\n\n // remember the timestamp of the last touch end\n dygraphLastTouchEnd.current = now\n propsRef.current.immediatelyDispatchPanAndZoom()\n },\n },\n }\n\n const data = isFakeStacked\n ? getDataForFakeStacked(chartData.result.data, dimensionsVisibility)\n : chartData.result.data\n const instance = new Dygraph((chartElement.current), data, dygraphOptions)\n dygraphInstance.current = instance\n }\n }, [attributes, chartData, chartMetadata, chartSettings, chartUuid, dimensionsVisibility,\n hasEmptyData, hiddenLabelsElementId, isFakeStacked,\n orderedColors, setHoveredX, setMinMax, shouldSmoothPlot, unitsCurrent,\n xAxisDateString, xAxisTimeString, updatePrecededPosition, dispatch])\n\n useUpdateEffect(() => {\n if (dygraphInstance.current) {\n const isSparkline = attributes.dygraphTheme === \"sparkline\"\n const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n dygraphInstance.current.updateOptions({\n ylabel: (isSparkline || isLegendOnBottom) ? undefined : unitsCurrent,\n })\n }\n }, [attributes, unitsCurrent])\n\n\n // immediately update when changing global chart underlay or currently showed alarm\n useUpdateEffect(() => {\n if (dygraphInstance.current) {\n dygraphInstance.current.updateOptions({})\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [alarm, globalChartUnderlay])\n\n const spacePanelTransitionEndIsActive = useSelector(selectSpacePanelTransitionEndIsActive)\n useUpdateEffect(() => {\n if (dygraphInstance.current) {\n // dygraph always resizes on browser width change, but doesn't resize when the container\n // has different width.\n window.requestAnimationFrame(() => {\n if (dygraphInstance.current) {\n (dygraphInstance.current as NetdataDygraph).resize()\n }\n })\n }\n }, [spacePanelTransitionEndIsActive])\n\n // update data of the chart\n // first effect should only be made by new DygraphInstance()\n useUpdateEffect(() => {\n // dont update when there is no data - in this case we should still show old chart\n if (dygraphInstance.current && !hasEmptyData) {\n // todo support state.tmp.dygraph_force_zoom\n const forceDateWindow = [viewAfter, viewBefore]\n\n // in old dashboard, when chart needed to reset internal dateWindow state,\n // dateWindow was set to null, and new dygraph got the new dateWindow from results.\n // this caused small unsync between dateWindow of parent (master) and child charts\n // i also detected that forceDateWindow timestamps have slightly better performance (10%)\n // so if the chart needs to change local dateWindow, we'll always use timestamps instead of\n // null.\n\n const xAxisRange = dygraphInstance.current.xAxisRange()\n // eslint-disable-next-line max-len\n const hasChangedDuration = Math.abs((viewBefore - viewAfter) - (xAxisRange[1] - xAxisRange[0])) > timeframeThreshold\n\n // check if the time is relative\n const hasScrolledToTheFutureDuringPlayMode = viewBefore <= 0\n && (xAxisRange[1] > viewBefore)\n // if viewAfter is bigger than current dateWindow start, just reset dateWindow\n && (xAxisRange[0] > viewAfter)\n && !hasChangedDuration\n\n const optionsDateWindow = (isRemotelyControlled && !hasScrolledToTheFutureDuringPlayMode)\n ? { dateWindow: forceDateWindow }\n : {}\n\n const { dygraphColors = orderedColors } = attributes\n const file = isFakeStacked\n ? getDataForFakeStacked(chartData.result.data, dimensionsVisibility)\n : chartData.result.data\n\n const includeZero = dimensionsVisibility.length === 1 ||\n dimensionsVisibility.filter(x => x === true).length > 1\n\n dygraphInstance.current.updateOptions({\n ...optionsDateWindow,\n colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n file,\n labels: chartData.result.labels,\n fillAlpha: dygraphFillAlpha,\n ...(dygraphChartType === \"stacked\" ? { includeZero } : {}),\n stackedGraph: dygraphChartType === \"stacked\" && !isFakeStacked,\n // see explanation about reversing before isFakeStacked assignment\n visibility: isFakeStacked ? reverse(dimensionsVisibility) : dimensionsVisibility,\n })\n }\n }, [attributes, chartData.result, chartUuid, dimensionsVisibility, dygraphChartType,\n dygraphFillAlpha, hasEmptyData, isFakeStacked, isRemotelyControlled, orderedColors,\n viewAfter, viewBefore])\n\n useUpdateEffect(() => {\n if (!dygraphInstance.current) {\n return\n }\n\n const dygraphOptionsStatic = getInitialDygraphOptions({\n attributes,\n chartData,\n chartMetadata,\n chartSettings,\n dimensionsVisibility,\n hiddenLabelsElementId,\n isFakeStacked,\n orderedColors,\n setMinMax,\n shouldSmoothPlot,\n unitsCurrent,\n xAxisDateString,\n xAxisTimeString,\n })\n if (!hasEmptyData) dygraphInstance.current.updateOptions(dygraphOptionsStatic)\n }, [dygraphChartType, timezone])\n\n // set selection\n const currentSelectionMasterId = useSelector(selectGlobalSelectionMaster)\n useLayoutEffect(() => {\n if (dygraphInstance.current && currentSelectionMasterId !== chartUuid) {\n if (hoveredRow === -1) {\n // getSelection is 100 times faster that clearSelection\n if (dygraphInstance.current.getSelection() !== -1) {\n dygraphInstance.current.clearSelection()\n }\n return\n }\n dygraphInstance.current.setSelection(hoveredRow)\n }\n }, [chartData, chartUuid, currentSelectionMasterId, hoveredRow,\n viewAfter, viewBefore])\n\n\n // handle resizeHeight change\n const resizeHeight = useSelector(\n (state: AppStateT) => selectResizeHeight(state, { id: chartUuid }),\n )\n useLayoutEffect(() => {\n if (dygraphInstance.current) {\n (dygraphInstance.current as NetdataDygraph).resize()\n }\n }, [resizeHeight, chartData.dimension_names.length])\n\n\n const commonMinState = useSelector((state: AppStateT) => (\n attributes.commonMin\n ? selectCommonMin(state, attributes.commonMin)\n : undefined\n ))\n const commonMaxState = useSelector((state: AppStateT) => (\n attributes.commonMax\n ? selectCommonMax(state, attributes.commonMax)\n : undefined\n ))\n\n useLayoutEffect(() => {\n const { commonMin: commonMinKey, commonMax: commonMaxKey } = attributes\n\n if (\n dygraphInstance.current\n && (commonMinKey || commonMaxKey)\n ) {\n const extremes = (dygraphInstance.current as NetdataDygraph).yAxisExtremes()[0]\n const [currentMin, currentMax] = extremes\n\n const {\n dygraphValueRange = [null, null],\n } = attributes\n // if the user gave a valueRange, respect it\n const shouldUseCommonMin = dygraphValueRange[0] === null\n const shouldUseCommonMax = dygraphValueRange[1] === null\n\n\n let shouldUpdate = false\n let valueRange: number[] = [...extremes]\n\n // check if current extreme (painted by dygraph) is not more extreme than commonMin/Max\n // if yes - update the chart\n if (commonMinKey && shouldUseCommonMin) {\n if (commonMinState && commonMinState.currentExtreme < currentMin) {\n valueRange[0] = commonMinState.currentExtreme\n shouldUpdate = true\n }\n }\n if (commonMaxKey && shouldUseCommonMax) {\n if (commonMaxState && commonMaxState.currentExtreme > currentMax) {\n valueRange[1] = commonMaxState.currentExtreme\n shouldUpdate = true\n }\n }\n\n if (shouldUpdate) {\n dygraphInstance.current.updateOptions({ valueRange })\n const newExtremes = (dygraphInstance.current as NetdataDygraph).yAxisExtremes()[0]\n // get updated valueRange (rounded by dygraph)\n valueRange = [...newExtremes]\n }\n\n // if the value is different than the one stored in state, update redux state\n if (commonMinKey && shouldUseCommonMin\n && (valueRange[0] !== commonMinState?.charts[chartUuid])\n ) {\n dispatch(setCommonMinAction({ chartUuid, commonMinKey, value: valueRange[0] }))\n }\n if (commonMaxKey && shouldUseCommonMax\n && (valueRange[1] !== commonMaxState?.charts[chartUuid])\n ) {\n dispatch(setCommonMaxAction({ chartUuid, commonMaxKey, value: valueRange[1] }))\n }\n }\n }, [attributes, chartData.result, chartUuid, commonMinState, commonMaxState, dispatch])\n\n useLayoutEffect(() => {\n if (isProceeded && dygraphInstance.current) {\n updatePrecededPosition(dygraphInstance.current)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isProceeded])\n\n useUnmount(() => {\n if (dygraphInstance.current) {\n dygraphInstance.current.destroy()\n }\n })\n\n /**\n * resize with ResizeObserver\n */\n const resizeObserver = useRef<ResizeObserver>()\n useMount(() => {\n if (!attributes.detectResize) {\n return\n }\n // flag used to prevent first callback (and resize) on dygraph initial draw\n let hasOmitedFirstCallback = false\n const callbackDebounced = debounce(() => {\n if (!hasOmitedFirstCallback) {\n hasOmitedFirstCallback = true\n return\n }\n\n if (dygraphInstance.current) {\n (dygraphInstance.current as NetdataDygraph).resize()\n }\n }, dygraphResizeDebounceTime)\n\n resizeObserver.current = new ResizeObserver(() => {\n callbackDebounced()\n })\n resizeObserver.current.observe(chartElement.current as HTMLDivElement)\n })\n\n useUnmount(() => {\n dygraphInstance.current = null // clear it for debounce purposes\n if (resizeObserver.current) {\n resizeObserver.current.disconnect()\n }\n })\n\n const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n return (\n <>\n <div\n ref={chartElement}\n id={chartElementId}\n className={classNames(\n chartElementClassName,\n { \"dygraph-chart--legend-bottom\": isLegendOnBottom },\n )}\n />\n {isProceeded && hasLegend && (\n <ProceededChartDisclaimer ref={precededChartRef as React.Ref<HTMLDivElement>} />\n )}\n {alarm?.value && hasLegend && (\n // @ts-ignore\n <AlarmBadge isVisible={isAlarmBadgeVisible} ref={alarmBadgeRef} status={alarm.status} label={alarm.value} />\n )}\n {hasLegend && (\n // @ts-ignore\n <NeutralPill isVisible={isHighlightBadgeVisible} ref={highlightBadgeRef} {...globalChartUnderlay} {...localHighlight} />\n )}\n <div className=\"dygraph-chart__labels-hidden\" id={hiddenLabelsElementId} />\n </>\n )\n}\n","// https://gist.github.com/ca0v/73a31f57b397606c9813472f7493a940\n\nexport const debounce = <F extends (...args: any[]) => any>(func: F, waitFor: number) => {\n let timeout: ReturnType<typeof setTimeout> | null = null\n\n const debounced = (...args: Parameters<F>) => {\n if (timeout !== null) {\n clearTimeout(timeout)\n timeout = null\n }\n timeout = setTimeout(() => func(...args), waitFor)\n }\n\n return debounced as (...args: Parameters<F>) => ReturnType<F>\n}\n","import React, { useRef, useEffect, useState } from \"react\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport EasyPie from \"easy-pie-chart\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { ChartLibraryName } from \"domains/chart/utils/chartLibrariesSettings\"\nimport {\n always, cond, identity, T, sortBy, map, pipe,\n} from \"ramda\"\n\ntype GetPercentFromValueMinMax = (arg: {\n value: number | undefined\n min: number | undefined\n max: number | undefined\n isMinOverride: boolean\n isMaxOverride: boolean\n}) => number\nconst getPercentFromValueMinMax: GetPercentFromValueMinMax = ({\n value = 0, min = 0, max = 0,\n isMinOverride,\n isMaxOverride,\n}) => {\n /* eslint-disable no-param-reassign */\n // todo refractor old logic to readable functions\n // if no easyPiechart-min-value attribute\n if (!isMinOverride && min > 0) {\n min = 0\n }\n if (!isMaxOverride && max < 0) {\n max = 0\n }\n\n let pcent\n\n if (min < 0 && max > 0) {\n // it is both positive and negative\n // zero at the top center of the chart\n max = (-min > max) ? -min : max\n pcent = Math.round((value * 100) / max)\n } else if (value >= 0 && min >= 0 && max >= 0) {\n // clockwise\n pcent = Math.round(((value - min) * 100) / (max - min))\n if (pcent === 0) {\n pcent = 0.1\n }\n } else {\n // counter clockwise\n pcent = Math.round(((value - max) * 100) / (max - min))\n if (pcent === 0) {\n pcent = -0.1\n }\n }\n /* eslint-enable no-param-reassign */\n return pcent\n}\n\ninterface Props {\n attributes: Attributes\n chartData: EasyPieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n chartLibrary: ChartLibraryName\n chartUuid: string\n colors: {\n [key: string]: string\n }\n chartWidth: number\n dimensionsVisibility: boolean[]\n isRemotelyControlled: boolean\n legendFormatValue: ((v: number | string | null) => number | string)\n onUpdateChartPanAndZoom: (arg: {\n after: number, before: number,\n callback: (after: number, before: number) => void,\n masterID: string,\n shouldNotExceedAvailableRange: boolean,\n }) => void\n orderedColors: string[]\n\n hoveredRow: number\n setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n setMinMax: (minMax: [number, number]) => void\n showUndefined: boolean\n unitsCurrent: string\n viewAfter: number\n viewBefore: number\n}\nexport const EasyPieChart = ({\n attributes,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n chartWidth,\n hoveredRow,\n legendFormatValue,\n orderedColors,\n setMinMax,\n showUndefined,\n unitsCurrent,\n}: Props) => {\n const chartElement = useRef<HTMLDivElement>(null)\n const [chartInstance, setChartInstance] = useState()\n\n const valueIndex = hoveredRow === -1\n ? 0\n : (chartData.result.length - 1 - hoveredRow) // because data for easy-pie-chart are flipped\n const value = showUndefined ? null : chartData.result[valueIndex]\n\n const {\n // if this is set, then we're overriding commonMin\n easyPieChartMinValue: min = chartData.min, // todo replace with commonMin\n easyPieChartMaxValue: max = chartData.max, // todo replace with commonMax\n } = attributes\n\n // make sure the order is correct and that value is not outside those boundaries\n // (this check was present in old dashboard but perhaps it's not needed)\n const safeMinMax = pipe(\n map((x: number) => +x),\n sortBy(identity),\n ([_min, _max]: number[]) => [Math.min(_min, value || 0), Math.max(_max, value || 0)],\n )([min, max])\n\n useEffect(() => {\n setMinMax(safeMinMax as [number, number])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safeMinMax])\n\n const pcent = getPercentFromValueMinMax({\n value: showUndefined ? 0 : (value as number),\n min: safeMinMax[0],\n max: safeMinMax[1],\n isMinOverride: attributes.easyPieChartMinValue !== undefined,\n isMaxOverride: attributes.easyPieChartMaxValue !== undefined,\n })\n\n useEffect(() => {\n if (chartElement.current && !chartInstance) {\n const stroke = cond([\n [(v) => v < 3, always(2)],\n [T, identity],\n ])(Math.floor(chartWidth / 22))\n\n const {\n easyPieChartTrackColor = window.NETDATA.themes.current.easypiechart_track,\n easyPieChartScaleColor = window.NETDATA.themes.current.easypiechart_scale,\n easyPieChartScaleLength = 5,\n easyPieChartLineCap = \"round\",\n easyPieChartLineWidth = stroke,\n easyPieChartTrackWidth,\n easyPieChartSize = chartWidth,\n easyPieChartRotate = 0,\n easyPieChartAnimate = { duration: 500, enabled: true },\n easyPieChartEasing,\n } = attributes\n\n const newChartInstance = new EasyPie(chartElement.current, {\n barColor: orderedColors[0],\n trackColor: easyPieChartTrackColor,\n scaleColor: easyPieChartScaleColor,\n scaleLength: easyPieChartScaleLength,\n lineCap: easyPieChartLineCap,\n lineWidth: easyPieChartLineWidth,\n trackWidth: easyPieChartTrackWidth,\n size: easyPieChartSize,\n rotate: easyPieChartRotate,\n animate: easyPieChartAnimate,\n easing: easyPieChartEasing,\n })\n setChartInstance(newChartInstance)\n }\n }, [attributes, chartData, chartInstance, chartWidth, orderedColors])\n\n // update with value\n useEffect(() => {\n if (chartInstance) {\n const shouldUseAnimation = hoveredRow === -1 && !showUndefined\n\n if (shouldUseAnimation && !chartInstance.options.animate.enabled) {\n chartInstance.enableAnimation()\n } else if (!shouldUseAnimation && chartInstance.options.animate.enabled) {\n chartInstance.disableAnimation()\n }\n\n setTimeout(() => {\n // need to be in timeout to trigger animation properly\n chartInstance.update(pcent)\n }, 0)\n }\n }, [chartInstance, hoveredRow, pcent, showUndefined])\n\n const valueFontSize = (chartWidth * 2) / 3 / 5\n const valuetop = Math.round((chartWidth - valueFontSize - (chartWidth / 40)) / 2)\n\n const titleFontSize = Math.round((valueFontSize * 1.6) / 3)\n const titletop = Math.round(valuetop - (titleFontSize * 2) - (chartWidth / 40))\n\n const unitFontSize = Math.round(titleFontSize * 0.9)\n const unitTop = Math.round(valuetop + (valueFontSize + unitFontSize) + (chartWidth / 40))\n // to update, just label innerText and pcent are changed\n\n return (\n <div ref={chartElement} id={chartElementId} className={chartElementClassName}>\n <span\n className=\"easyPieChartLabel\"\n style={{\n fontSize: valueFontSize,\n top: valuetop,\n }}\n >\n {legendFormatValue(value)}\n </span>\n <span\n className=\"easyPieChartTitle\"\n style={{\n fontSize: titleFontSize,\n top: titletop,\n }}\n >\n {attributes.title || chartMetadata.title}\n </span>\n <span\n className=\"easyPieChartUnits\"\n style={{\n fontSize: unitFontSize,\n top: unitTop,\n }}\n >\n {unitsCurrent}\n </span>\n\n </div>\n )\n}\n","import React, {\n useRef, useEffect, useState,\n} from \"react\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport { Gauge } from \"gaugeJS\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { ChartLibraryName } from \"domains/chart/utils/chartLibrariesSettings\"\nimport {\n identity, sortBy, map, pipe, always,\n} from \"ramda\"\n\nconst isSetByUser = (x: undefined | number): x is number => (\n typeof x === \"number\"\n)\n\ninterface Props {\n attributes: Attributes\n chartData: EasyPieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n chartLibrary: ChartLibraryName\n chartUuid: string\n colors: {\n [key: string]: string\n }\n chartHeight: number\n chartWidth: number\n dimensionsVisibility: boolean[]\n isRemotelyControlled: boolean\n legendFormatValue: ((v: number | string | null) => number | string)\n onUpdateChartPanAndZoom: (arg: {\n after: number, before: number,\n callback: (after: number, before: number) => void,\n masterID: string,\n shouldNotExceedAvailableRange: boolean,\n }) => void\n orderedColors: string[]\n\n hoveredRow: number\n hoveredX: number | null\n setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n setMinMax: (minMax: [number, number]) => void\n showUndefined: boolean\n unitsCurrent: string\n viewAfter: number\n viewBefore: number\n}\nexport const GaugeChart = ({\n attributes,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n chartUuid,\n chartHeight,\n chartWidth,\n hoveredRow,\n legendFormatValue,\n orderedColors,\n setMinMax,\n showUndefined,\n unitsCurrent,\n}: Props) => {\n const chartCanvasElement = useRef<HTMLCanvasElement>(null)\n const [chartInstance, setChartInstance] = useState()\n\n const valueIndex = hoveredRow === -1\n ? 0\n : (chartData.result.length - 1 - hoveredRow) // because data for easy-pie-chart are flipped\n const value = chartData.result[valueIndex]\n\n const {\n // if this is set, then we're overriding commonMin\n gaugeMinValue: minAttribute,\n gaugeMaxValue: maxAttribute,\n } = attributes\n\n const min = isSetByUser(minAttribute) ? minAttribute : chartData.min\n const max = isSetByUser(maxAttribute) ? maxAttribute : chartData.max\n // we should use minAttribute if it's existing\n // old app was using commonMin\n\n // make sure the order is correct and that value is not outside those boundaries\n // (this check was present in old dashboard but perhaps it's not needed)\n const [safeMin, safeMax] = pipe(\n // if they are attributes, make sure they're converted to numbers\n map((x: number) => +x),\n // make sure it is zero based\n // but only if it has not been set by the user\n ([_min, _max]: number[]) => [\n (!isSetByUser(minAttribute) && _min > 0) ? 0 : _min,\n (!isSetByUser(maxAttribute) && _max < 0) ? 0 : _max,\n ],\n // make sure min <= max\n sortBy(identity),\n ([_min, _max]: number[]) => [Math.min(_min, value), Math.max(_max, value)],\n )([min, max])\n // calling outside \"useEffect\" intentionally,\n // because it should update the values first, and only then render the chart in useEffect()\n useEffect(() => {\n setMinMax([safeMin, safeMax])\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [safeMin, safeMax])\n\n const pcent = pipe(\n always(((value - safeMin) * 100) / (safeMax - safeMin)),\n // bug fix for gauge.js 1.3.1\n // if the value is the absolute min or max, the chart is broken\n (_pcent: number) => Math.max(0.001, _pcent),\n (_pcent: number) => Math.min(99.999, _pcent),\n )()\n\n useEffect(() => {\n if (chartCanvasElement.current && !chartInstance) {\n const {\n gaugePointerColor = window.NETDATA.themes.current.gauge_pointer,\n gaugeStrokeColor = window.NETDATA.themes.current.gauge_stroke,\n gaugeStartColor = orderedColors[0],\n gaugeStopColor,\n gaugeGenerateGradient = false,\n } = attributes\n\n const options = {\n lines: 12, // The number of lines to draw\n angle: 0.14, // The span of the gauge arc\n lineWidth: 0.57, // The line thickness\n radiusScale: 1.0, // Relative radius\n pointer: {\n length: 0.85, // 0.9 The radius of the inner circle\n strokeWidth: 0.045, // The rotation offset\n color: gaugePointerColor, // Fill color\n },\n\n // If false, the max value of the gauge will be updated if value surpass max\n // If true, the min value of the gauge will be fixed unless you set it manually\n limitMax: true,\n limitMin: true,\n colorStart: gaugeStartColor,\n colorStop: gaugeStopColor,\n strokeColor: gaugeStrokeColor,\n generateGradient: (gaugeGenerateGradient === true), // gmosx:\n gradientType: 0,\n highDpiSupport: true, // High resolution support\n }\n\n const newChartInstance = new Gauge(chartCanvasElement.current).setOptions(options)\n\n // we will always feed a percentage (copied from old dashboard)\n newChartInstance.minValue = 0\n newChartInstance.maxValue = 100\n\n setChartInstance(newChartInstance)\n }\n }, [attributes, chartData, chartInstance, chartWidth, orderedColors])\n\n // update with value\n useEffect(() => {\n if (chartInstance) {\n // gauge animation\n const shouldUseAnimation = hoveredRow === -1 && !showUndefined\n // animation doesn't work in newest, 1.3.7 version!\n const speed = shouldUseAnimation ? 32 : 1000000000\n chartInstance.animationSpeed = speed\n setTimeout(() => {\n chartInstance.set(showUndefined ? 0 : pcent)\n }, 0)\n }\n }, [chartInstance, chartHeight, chartWidth, hoveredRow, pcent, showUndefined])\n\n const valueFontSize = Math.floor(chartHeight / 5)\n const valueTop = Math.round((chartHeight - valueFontSize) / 3.2)\n\n const titleFontSize = Math.round(valueFontSize / 2.1)\n const titleTop = 0\n\n const unitFontSize = Math.round(titleFontSize * 0.9)\n\n const minMaxFontSize = Math.round(valueFontSize * 0.75)\n return (\n <div\n id={chartElementId}\n className={chartElementClassName}\n >\n <canvas\n ref={chartCanvasElement}\n className=\"gaugeChart\"\n id={`gauge-${chartUuid}-canvas`}\n style={{\n width: chartWidth,\n height: chartHeight,\n }}\n />\n <span\n className=\"gaugeChartLabel\"\n style={{\n fontSize: valueFontSize,\n top: valueTop,\n }}\n >\n {legendFormatValue(showUndefined ? null : value)}\n </span>\n <span\n className=\"gaugeChartTitle\"\n style={{\n fontSize: titleFontSize,\n top: titleTop,\n }}\n >\n {attributes.title || chartMetadata.title}\n </span>\n <span\n className=\"gaugeChartUnits\"\n style={{\n fontSize: unitFontSize,\n }}\n >\n {unitsCurrent}\n </span>\n <span className=\"gaugeChartMin\" style={{ fontSize: minMaxFontSize }}>\n {legendFormatValue(showUndefined ? null : safeMin)}\n </span>\n <span className=\"gaugeChartMax\" style={{ fontSize: minMaxFontSize }}>\n {legendFormatValue(showUndefined ? null : safeMax)}\n </span>\n </div>\n )\n}\n","import {\n cond, identity, map, pipe, replace, splitEvery, T, toString,\n} from \"ramda\"\n\ntype NormalizeHex = (hex: string) => string\nexport const normalizeHex: NormalizeHex = pipe(\n toString,\n replace(/[^0-9a-f]/gi, \"\"),\n cond([\n [(str) => str.length < 6, (str) => str[0] + str[0] + str[1] + str[1] + str[2] + str[2]],\n [T, identity],\n ]),\n)\n\nexport const colorLuminance = (hex: string, lum: number = 0) => {\n const hexNormalized = normalizeHex(hex)\n\n // convert to decimal and change luminosity\n const rgb = pipe(\n // point-free version generates ts error\n (str: string) => splitEvery(2, str),\n map(\n pipe(\n (str: string) => parseInt(str, 16),\n (nr) => Math.round(\n Math.min(\n Math.max(0, nr + (nr * lum)),\n 255,\n ),\n ).toString(16),\n (str) => `00${str}`.substr(str.length),\n ),\n ),\n (x) => x.join(\"\"),\n )(hexNormalized)\n return `#${rgb}`\n}\n","/* eslint-disable indent */\n/* eslint-disable operator-linebreak */\n/* eslint-disable comma-dangle */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable consistent-return */\nimport \"jquery-sparkline\"\nimport React, { useRef, useEffect, useState } from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { colorLuminance } from \"domains/chart/utils/color-luminance\"\nimport { MS_IN_SECOND } from \"utils/utils\"\nimport { TimeRange } from \"types/common\"\n\nconst convertToTimestamp = (number: number) => {\n if (number > 0) {\n return number\n }\n return new Date().valueOf() + number // number is negative or zero\n}\n\ninterface TimeWindowCorrection {\n paddingLeftPercentage?: string\n widthRatio?: number\n}\nconst getForceTimeWindowCorrection = (\n chartData: EasyPieChartData,\n viewRange: TimeRange\n): TimeWindowCorrection => {\n const requestedAfter = convertToTimestamp(viewRange[0])\n const requestedBefore = convertToTimestamp(viewRange[1])\n const after = chartData.after * MS_IN_SECOND\n const before = chartData.before * MS_IN_SECOND\n\n const currentDuration = before - after\n const requestedDuration = requestedBefore - requestedAfter\n // don't do overrides when current (available) duration is bigger or only slightly lower\n // than requested duration\n const DURATION_CHANGE_TOLERANCE = 1.03\n if (currentDuration > requestedDuration / DURATION_CHANGE_TOLERANCE) {\n return {}\n }\n\n const widthRatio = currentDuration / requestedDuration\n\n const visibleDuration = requestedBefore - requestedAfter\n const paddingLeftPercentage = `${100 * ((after - requestedAfter) / visibleDuration)}%`\n\n return {\n paddingLeftPercentage,\n widthRatio,\n }\n}\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: EasyPieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n dimensionsVisibility: boolean[]\n isRemotelyControlled: boolean\n orderedColors: string[]\n unitsCurrent: string\n viewAfterForCurrentData: number\n viewBeforeForCurrentData: number\n}\nexport const SparklineChart = ({\n attributes,\n chartContainerElement,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n orderedColors,\n unitsCurrent,\n viewAfterForCurrentData,\n viewBeforeForCurrentData,\n}: Props) => {\n const chartElement = useRef<HTMLDivElement>(null)\n\n // update width, height automatically each time\n const [$chartElement, set$chartElement] = useState()\n const sparklineOptions = useRef<{ [key: string]: any }>()\n\n const { paddingLeftPercentage = undefined, widthRatio = 1 } = attributes.forceTimeWindow\n ? getForceTimeWindowCorrection(chartData, [viewAfterForCurrentData, viewBeforeForCurrentData])\n : {}\n\n const updateSparklineValues = () => {\n if (!$chartElement) return\n\n const { width, height } = chartContainerElement.getBoundingClientRect()\n // @ts-ignore\n $chartElement.sparkline(chartData.result, {\n ...sparklineOptions.current,\n width: Math.floor(width * widthRatio),\n height: Math.floor(height),\n })\n }\n\n // create chart\n useEffect(() => {\n const { sparklineLineColor = orderedColors[0] } = attributes\n const defaultFillColor =\n chartMetadata.chart_type === \"line\"\n ? window.NETDATA.themes.current.background\n : colorLuminance(sparklineLineColor, window.NETDATA.chartDefaults.fill_luminance)\n const chartTitle = attributes.title || chartMetadata.title\n\n const emptyStringIfDisable = (x: string | undefined) => (x === \"disable\" ? \"\" : x)\n\n const {\n sparklineType = \"line\",\n sparklineFillColor = defaultFillColor,\n sparklineDisableInteraction = false,\n sparklineDisableTooltips = false,\n sparklineDisableHighlight = false,\n sparklineHighlightLighten = 1.4,\n sparklineTooltipSuffix = ` ${unitsCurrent}`,\n sparklineNumberFormatter = (n: number) => n.toFixed(2),\n } = attributes\n\n const sparklineInitOptions = {\n type: sparklineType,\n lineColor: sparklineLineColor,\n fillColor: sparklineFillColor,\n chartRangeMin: attributes.sparklineChartRangeMin,\n chartRangeMax: attributes.sparklineChartRangeMax,\n composite: attributes.sparklineComposite,\n enableTagOptions: attributes.sparklineEnableTagOptions,\n tagOptionPrefix: attributes.sparklineTagOptionPrefix,\n tagValuesAttribute: attributes.sparklineTagValuesAttribute,\n\n disableHiddenCheck: attributes.sparklineDisableHiddenCheck,\n defaultPixelsPerValue: attributes.sparklineDefaultPixelsPerValue,\n spotColor: emptyStringIfDisable(attributes.sparklineSpotColor),\n minSpotColor: emptyStringIfDisable(attributes.sparklineMinSpotColor),\n maxSpotColor: emptyStringIfDisable(attributes.sparklineMaxSpotColor),\n spotRadius: attributes.sparklineSpotRadius,\n valueSpots: attributes.sparklineValueSpots,\n highlightSpotColor: attributes.sparklineHighlightSpotColor,\n highlightLineColor: attributes.sparklineHighlightLineColor,\n lineWidth: attributes.sparklineLineWidth,\n normalRangeMin: attributes.sparklineNormalRangeMin,\n normalRangeMax: attributes.sparklineNormalRangeMax,\n drawNormalOnTop: attributes.sparklineDrawNormalOnTop,\n xvalues: attributes.sparklineXvalues,\n chartRangeClip: attributes.sparklineChartRangeClip,\n chartRangeMinX: attributes.sparklineChartRangeMinX,\n chartRangeMaxX: attributes.sparklineChartRangeMaxX,\n disableInteraction: sparklineDisableInteraction,\n disableTooltips: sparklineDisableTooltips,\n disableHighlight: sparklineDisableHighlight,\n highlightLighten: sparklineHighlightLighten,\n highlightColor: attributes.sparklineHighlightColor,\n tooltipContainer: attributes.sparklineTooltipContainer,\n tooltipClassname: attributes.sparklineTooltipClassname,\n tooltipChartTitle: chartTitle,\n tooltipFormat: attributes.sparklineTooltipFormat,\n tooltipPrefix: attributes.sparklineTooltipPrefix,\n tooltipSuffix: sparklineTooltipSuffix,\n tooltipSkipNull: attributes.sparklineTooltipSkipNull,\n tooltipValueLookups: attributes.sparklineTooltipValueLookups,\n tooltipFormatFieldlist: attributes.sparklineTooltipFormatFieldlist,\n tooltipFormatFieldlistKey: attributes.sparklineTooltipFormatFieldlistKey,\n numberFormatter: sparklineNumberFormatter,\n numberDigitGroupSep: attributes.sparklineNumberDigitGroupSep,\n numberDecimalMark: attributes.sparklineNumberDecimalMark,\n numberDigitGroupCount: attributes.sparklineNumberDigitGroupCount,\n animatedZooms: attributes.sparklineAnimatedZooms,\n }\n sparklineOptions.current = sparklineInitOptions\n\n if (!chartElement.current || $chartElement) return\n\n set$chartElement(() => window.$(chartElement.current))\n }, [\n $chartElement,\n attributes,\n chartContainerElement,\n chartData.result,\n chartMetadata,\n orderedColors,\n unitsCurrent,\n widthRatio,\n ])\n\n const { sparklineOnHover } = attributes\n useEffect(() => {\n if (!$chartElement || !sparklineOnHover) return\n\n const onLeave = () => sparklineOnHover(null)\n const onChange = ({ sparklines: [sparkline] }: any) => {\n const { x, y } = sparkline.getCurrentRegionFields()\n sparklineOnHover({ x, y })\n }\n\n // @ts-ignore\n $chartElement.bind(\"sparklineRegionChange\", onChange).bind(\"mouseleave\", onLeave)\n return () => {\n // @ts-ignore\n $chartElement.unbind(\"sparklineRegionChange\", onChange).unbind(\"mouseleave\", onLeave)\n }\n }, [$chartElement, sparklineOnHover])\n\n // update chart\n useEffect(updateSparklineValues, [$chartElement, chartData.result])\n\n const style = paddingLeftPercentage\n ? {\n textAlign: \"initial\" as \"initial\", // :) typescript\n paddingLeft: paddingLeftPercentage,\n }\n : undefined\n\n return (\n <div ref={chartElement} id={chartElementId} className={chartElementClassName} style={style} />\n )\n}\n","import * as d3 from \"d3\"\n\nwindow.d3 = d3\n","let fetchPromise: Promise<string>\n\nconst GOOGLE_JS_API_SRC = \"https://www.google.com/jsapi\"\n\nexport const loadGoogleVisualizationApi = () => {\n if (fetchPromise) {\n return fetchPromise\n }\n fetchPromise = new Promise((resolve, reject) => {\n setTimeout(() => {\n const script = document.createElement(\"script\")\n script.type = \"text/javascript\"\n script.async = true\n script.src = GOOGLE_JS_API_SRC\n\n script.onerror = () => {\n reject(Error(\"error loading google.js api\"))\n }\n script.onload = () => {\n resolve(\"ok\")\n }\n\n const firstScript = document.getElementsByTagName(\"script\")[0] as HTMLScriptElement\n (firstScript.parentNode as Node).insertBefore(script, firstScript)\n }, 1000)\n }).then(() => new Promise((resolve) => {\n window.google.load(\"visualization\", \"1.1\", {\n packages: [\"corechart\", \"controls\"],\n callback: resolve,\n })\n }))\n return fetchPromise\n}\n","// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport \"jquery-sparkline\"\nimport React, {\n useRef, useEffect, useState,\n} from \"react\"\n\nimport \"../../utils/d3-loader\"\n// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport d3pie from \"vendor/d3pie-0.2.1-netdata-3\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport {\n ChartMetadata,\n D3pieChartData,\n} from \"domains/chart/chart-types\"\nimport { seconds4human } from \"domains/chart/utils/seconds4human\"\nimport { useDateTime } from \"utils/date-time\"\nimport { tail } from \"ramda\"\n\nconst emptyContent = {\n label: \"no data\",\n value: 100,\n color: \"#666666\",\n}\n\ntype GetDateRange = (arg: {\n chartData: D3pieChartData,\n index: number,\n localeDateString: (date: number | Date) => string,\n localeTimeString: (time: number | Date) => string,\n}) => string\nconst getDateRange: GetDateRange = ({\n chartData, index,\n localeDateString, localeTimeString,\n}) => {\n const dt = Math.round((chartData.before - chartData.after + 1) / chartData.points)\n const dtString = seconds4human(dt)\n\n const before = chartData.result.data[index].time\n const after = before - (dt * 1000)\n\n const d1 = localeDateString(after)\n const t1 = localeTimeString(after)\n const d2 = localeDateString(before)\n const t2 = localeTimeString(before)\n\n if (d1 === d2) {\n return `${d1} ${t1} to ${t2}, ${dtString}`\n }\n\n return `${d1} ${t1} to ${d2} ${t2}, ${dtString}`\n}\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: D3pieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n dimensionsVisibility: boolean[]\n hoveredRow: number\n hoveredX: number | null\n isRemotelyControlled: boolean\n legendFormatValue: ((v: number | string | null) => number | string)\n orderedColors: string[]\n setMinMax: (minMax: [number, number]) => void\n showUndefined: boolean\n unitsCurrent: string\n}\nexport const D3pieChart = ({\n attributes,\n chartContainerElement,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n orderedColors,\n setMinMax,\n unitsCurrent,\n}: Props) => {\n const chartElement = useRef<HTMLDivElement>(null)\n\n const legendFormatValueRef = useRef(legendFormatValue)\n legendFormatValueRef.current = legendFormatValue\n\n const [d3pieInstance, setD3pieInstance] = useState()\n const d3pieOptions = useRef<{[key: string]: any}>()\n\n const { localeDateString, localeTimeString } = useDateTime()\n\n // create chart\n useEffect(() => {\n if (chartElement.current && !d3pieInstance) {\n // d3pieSetContent\n // todo this should be set in chart.tsx, when creating hook\n setMinMax([chartData.min, chartData.max])\n // index is ROW! it's !== 0 only when selection is made\n const index = 0\n const content = tail(chartData.result.labels).map((label, i) => {\n const value = chartData.result.data[index][label]\n const color = orderedColors[i]\n return {\n label,\n value,\n color,\n }\n }).filter((x) => x.value !== null && x.value > 0)\n const safeContent = content.length > 0 ? content : emptyContent\n\n const defaultTitle = attributes.title || chartMetadata.title\n const dateRange = getDateRange({\n chartData,\n index: 0,\n localeDateString,\n localeTimeString,\n })\n const {\n d3pieTitle = defaultTitle,\n d3pieSubtitle = unitsCurrent,\n d3pieFooter = dateRange,\n d3pieTitleColor = window.NETDATA.themes.current.d3pie.title,\n d3pieTitleFontsize = 12,\n d3pieTitleFontweight = \"bold\",\n d3pieTitleFont = \"arial\",\n d3PieSubtitleColor = window.NETDATA.themes.current.d3pie.subtitle,\n d3PieSubtitleFontsize = 10,\n d3PieSubtitleFontweight = \"normal\",\n d3PieSubtitleFont = \"arial\",\n d3PieFooterColor = window.NETDATA.themes.current.d3pie.footer,\n d3PieFooterFontsize = 9,\n d3PieFooterFontweight = \"bold\",\n d3PieFooterFont = \"arial\",\n d3PieFooterLocation = \"bottom-center\",\n\n d3PiePieinnerradius = \"45%\",\n d3PiePieouterradius = \"80%\",\n d3PieSortorder = \"value-desc\",\n d3PieSmallsegmentgroupingEnabled = false,\n d3PieSmallsegmentgroupingValue = 1,\n d3PieSmallsegmentgroupingValuetype = \"percentage\",\n d3PieSmallsegmentgroupingLabel = \"other\",\n d3PieSmallsegmentgroupingColor = window.NETDATA.themes.current.d3pie.other,\n\n d3PieLabelsOuterFormat = \"label-value1\",\n d3PieLabelsOuterHidewhenlessthanpercentage = null,\n d3PieLabelsOuterPiedistance = 15,\n d3PieLabelsInnerFormat = \"percentage\",\n d3PieLabelsInnerHidewhenlessthanpercentage = 2,\n\n d3PieLabelsMainLabelColor = window.NETDATA.themes.current.d3pie.mainlabel,\n d3PieLabelsMainLabelFont = \"arial\",\n d3PieLabelsMainLabelFontsize = 10,\n d3PieLabelsMainLabelFontweight = \"normal\",\n\n d3PieLabelsPercentageColor = window.NETDATA.themes.current.d3pie.percentage,\n d3PieLabelsPercentageFont = \"arial\",\n d3PieLabelsPercentageFontsize = 10,\n d3PieLabelsPercentageFontweight = \"bold\",\n\n d3PieLabelsValueColor = window.NETDATA.themes.current.d3pie.value,\n d3PieLabelsValueFont = \"arial\",\n d3PieLabelsValueFontsize = 10,\n d3PieLabelsValueFontweight = \"bold\",\n\n d3PieLabelsLinesEnabled = true,\n d3PieLabelsLinesStyle = \"curved\",\n d3PieLabelsLinesColor = \"segment\", // \"segment\" or a hex color\n\n d3PieLabelsTruncationEnabled = false,\n d3PieLabelsTruncationTruncatelength = 30,\n\n d3PieMiscColorsSegmentstroke = window.NETDATA.themes.current.d3pie.segment_stroke,\n d3PieMiscGradientEnabled = false,\n d3PieMiscColorsPercentage = 95,\n d3PieMiscGradientColor = window.NETDATA.themes.current.d3pie.gradient_color,\n\n d3PieCssprefix = null,\n } = attributes\n\n const { width, height } = chartContainerElement.getBoundingClientRect()\n\n const initialD3pieOptions = {\n header: {\n title: {\n text: d3pieTitle,\n color: d3pieTitleColor,\n fontSize: d3pieTitleFontsize,\n fontWeight: d3pieTitleFontweight,\n font: d3pieTitleFont,\n },\n subtitle: {\n text: d3pieSubtitle,\n color: d3PieSubtitleColor,\n fontSize: d3PieSubtitleFontsize,\n fontWeight: d3PieSubtitleFontweight,\n font: d3PieSubtitleFont,\n },\n titleSubtitlePadding: 1,\n },\n footer: {\n text: d3pieFooter,\n color: d3PieFooterColor,\n fontSize: d3PieFooterFontsize,\n fontWeight: d3PieFooterFontweight,\n font: d3PieFooterFont,\n location: d3PieFooterLocation,\n },\n size: {\n canvasHeight: Math.floor(height),\n canvasWidth: Math.floor(width),\n pieInnerRadius: d3PiePieinnerradius,\n pieOuterRadius: d3PiePieouterradius,\n },\n data: {\n // none, random, value-asc, value-desc, label-asc, label-desc\n sortOrder: d3PieSortorder,\n smallSegmentGrouping: {\n enabled: d3PieSmallsegmentgroupingEnabled,\n value: d3PieSmallsegmentgroupingValue,\n // percentage, value\n valueType: d3PieSmallsegmentgroupingValuetype,\n label: d3PieSmallsegmentgroupingLabel,\n color: d3PieSmallsegmentgroupingColor,\n },\n\n // REQUIRED! This is where you enter your pie data; it needs to be an array of objects\n // of this form: { label: \"label\", value: 1.5, color: \"#000000\" } - color is optional\n content: safeContent,\n },\n\n\n labels: {\n outer: {\n // label, value, percentage, label-value1, label-value2, label-percentage1,\n // label-percentage2\n format: d3PieLabelsOuterFormat,\n hideWhenLessThanPercentage: d3PieLabelsOuterHidewhenlessthanpercentage,\n pieDistance: d3PieLabelsOuterPiedistance,\n },\n inner: {\n // label, value, percentage, label-value1, label-value2, label-percentage1,\n // label-percentage2\n format: d3PieLabelsInnerFormat,\n hideWhenLessThanPercentage: d3PieLabelsInnerHidewhenlessthanpercentage,\n },\n mainLabel: {\n color: d3PieLabelsMainLabelColor, // or 'segment' for dynamic color\n font: d3PieLabelsMainLabelFont,\n fontSize: d3PieLabelsMainLabelFontsize,\n fontWeight: d3PieLabelsMainLabelFontweight,\n },\n percentage: {\n color: d3PieLabelsPercentageColor,\n font: d3PieLabelsPercentageFont,\n fontSize: d3PieLabelsPercentageFontsize,\n fontWeight: d3PieLabelsPercentageFontweight,\n decimalPlaces: 0,\n },\n value: {\n color: d3PieLabelsValueColor,\n font: d3PieLabelsValueFont,\n fontSize: d3PieLabelsValueFontsize,\n fontWeight: d3PieLabelsValueFontweight,\n },\n lines: {\n enabled: d3PieLabelsLinesEnabled,\n style: d3PieLabelsLinesStyle,\n color: d3PieLabelsLinesColor,\n },\n truncation: {\n enabled: d3PieLabelsTruncationEnabled,\n truncateLength: d3PieLabelsTruncationTruncatelength,\n },\n formatter(context: any) {\n if (context.part === \"value\") {\n return legendFormatValueRef.current(context.value)\n }\n if (context.part === \"percentage\") {\n return `${context.label}%`\n }\n\n return context.label\n },\n },\n effects: {\n load: {\n effect: \"none\", // none / default\n speed: 0, // commented in the d3pie code to speed it up\n },\n pullOutSegmentOnClick: {\n effect: \"bounce\", // none / linear / bounce / elastic / back\n speed: 400,\n size: 5,\n },\n highlightSegmentOnMouseover: true,\n highlightLuminosity: -0.2,\n },\n tooltips: {\n enabled: false,\n type: \"placeholder\", // caption|placeholder\n string: \"\",\n placeholderParser: null, // function\n styles: {\n fadeInSpeed: 250,\n backgroundColor: window.NETDATA.themes.current.d3pie.tooltip_bg,\n backgroundOpacity: 0.5,\n color: window.NETDATA.themes.current.d3pie.tooltip_fg,\n borderRadius: 2,\n font: \"arial\",\n fontSize: 12,\n padding: 4,\n },\n },\n misc: {\n colors: {\n background: \"transparent\", // transparent or color #\n // segments: state.chartColors(),\n segmentStroke: d3PieMiscColorsSegmentstroke,\n },\n gradient: {\n enabled: d3PieMiscGradientEnabled,\n percentage: d3PieMiscColorsPercentage,\n color: d3PieMiscGradientColor,\n },\n canvasPadding: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5,\n },\n pieCenterOffset: {\n x: 0,\n y: 0,\n },\n cssPrefix: d3PieCssprefix,\n },\n callbacks: {\n onload: null,\n onMouseoverSegment: null,\n onMouseoutSegment: null,\n onClickSegment: null,\n },\n }\n // eslint-disable-next-line new-cap\n const newD3pieInstance = new d3pie(chartElement.current, initialD3pieOptions)\n d3pieOptions.current = initialD3pieOptions\n setD3pieInstance(() => newD3pieInstance)\n }\n }, [attributes, chartContainerElement, chartData, chartMetadata, d3pieInstance, legendFormatValue,\n localeDateString, localeTimeString, orderedColors, setMinMax, unitsCurrent])\n\n // update chart\n useEffect(() => {\n if (d3pieInstance && d3pieOptions.current) {\n const dateRange = getDateRange({\n chartData,\n index: 0,\n localeDateString,\n localeTimeString,\n })\n const {\n d3pieSubtitle = unitsCurrent,\n d3pieFooter = dateRange,\n } = attributes\n\n\n const isHoveredButNoData = !!hoveredX && (hoveredRow === -1)\n const slot = chartData.result.data.length - hoveredRow - 1\n\n const index = (slot < 0 || slot >= chartData.result.data.length)\n ? 0\n : slot\n\n const content = tail(chartData.result.labels).map((label, i) => {\n const value = chartData.result.data[index][label]\n const color = orderedColors[i]\n return {\n label,\n value,\n color,\n }\n }).filter((x) => x.value !== null && x.value > 0)\n const safeContent = (content.length > 0 && !isHoveredButNoData)\n ? content\n : [emptyContent]\n\n d3pieInstance.options.header.subtitle.text = d3pieSubtitle\n d3pieInstance.options.footer.text = d3pieFooter\n\n d3pieInstance.options.data.content = safeContent\n d3pieInstance.destroy()\n d3pieInstance.recreate()\n }\n }, [attributes, chartData, d3pieInstance, hoveredRow, hoveredX, localeDateString,\n localeTimeString, orderedColors, unitsCurrent])\n\n return (\n <div ref={chartElement} id={chartElementId} className={chartElementClassName} />\n )\n}\n","// @ts-ignore \"declare module\" doesn't work properly when importing dashboard in cloud\nimport \"peity\"\nimport React, {\n useRef, useState, useLayoutEffect,\n} from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { colorLuminance } from \"domains/chart/utils/color-luminance\"\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: EasyPieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n orderedColors: string[]\n}\nexport const PeityChart = ({\n attributes,\n chartContainerElement,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n orderedColors,\n}: Props) => {\n const chartElement = useRef<HTMLDivElement>(null)\n\n // update width, height automatically each time\n const [$chartElement, set$chartElement] = useState()\n const peityOptions = useRef<{\n stroke: string,\n fill: string,\n strokeWidth: number,\n width: number,\n height: number,\n }>()\n\n\n // create chart\n useLayoutEffect(() => {\n if (chartElement.current && !$chartElement) {\n const $element = window.$(chartElement.current)\n\n const { width, height } = chartContainerElement.getBoundingClientRect()\n\n const {\n peityStrokeWidth = 1,\n } = attributes\n const peityInitOptions = {\n stroke: window.NETDATA.themes.current.foreground,\n strokeWidth: peityStrokeWidth,\n width: Math.floor(width),\n height: Math.floor(height),\n fill: window.NETDATA.themes.current.foreground,\n }\n\n set$chartElement(() => $element)\n peityOptions.current = peityInitOptions\n }\n }, [attributes, $chartElement, chartContainerElement])\n\n // update chart\n useLayoutEffect(() => {\n if ($chartElement && peityOptions.current) {\n const getFillOverride = () => (\n chartMetadata.chart_type === \"line\"\n ? window.NETDATA.themes.current.background\n : colorLuminance(orderedColors[0], window.NETDATA.chartDefaults.fill_luminance)\n )\n const updatedOptions = {\n ...peityOptions.current,\n stroke: orderedColors[0],\n // optimizatino from old dashboard, perhaps could be transformed to useMemo()\n fill: (orderedColors[0] === peityOptions.current.stroke)\n ? peityOptions.current.fill\n : getFillOverride(),\n }\n $chartElement.peity(\"line\", updatedOptions)\n peityOptions.current = updatedOptions\n }\n }, [$chartElement, chartData, chartMetadata, orderedColors])\n\n return (\n <div\n ref={chartElement}\n id={chartElementId}\n className={chartElementClassName}\n >\n {chartData.result}\n </div>\n )\n}\n","import React, {\n useRef, useState, useLayoutEffect,\n} from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata, EasyPieChartData } from \"domains/chart/chart-types\"\nimport { loadGoogleVisualizationApi } from \"domains/chart/utils/google-visualization-loader\"\n\ninterface Props {\n attributes: Attributes\n chartData: EasyPieChartData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n orderedColors: string[]\n unitsCurrent: string\n}\nexport const GoogleChart = ({\n attributes,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n orderedColors,\n unitsCurrent,\n}: Props) => {\n const chartElement = useRef<HTMLDivElement>(null)\n const googleChartInstance = useRef<\n google.visualization.AreaChart |\n google.visualization.LineChart>()\n\n const [hasApiBeenLoaded, setHasApiBeenLoaded] = useState(false)\n loadGoogleVisualizationApi()\n .then(() => {\n setHasApiBeenLoaded(true)\n })\n\n const googleOptions = useRef<{[key: string]: unknown}>()\n\n // update chart\n useLayoutEffect(() => {\n if (googleChartInstance.current && googleOptions.current) {\n const dataTable = new window.google.visualization.DataTable(chartData.result)\n googleChartInstance.current.draw(dataTable, googleOptions.current)\n }\n }, [chartData])\n\n // create chart\n useLayoutEffect(() => {\n if (chartElement.current && !googleOptions.current && hasApiBeenLoaded) {\n const dataTable = new window.google.visualization.DataTable(chartData.result)\n\n const {\n title = chartMetadata.title,\n } = attributes\n const chartType = chartMetadata.chart_type\n const areaOpacity = new Map([\n [\"area\", window.NETDATA.options.current.color_fill_opacity_area],\n [\"stacked\", window.NETDATA.options.current.color_fill_opacity_stacked],\n ]).get(chartType) || 0.3\n const initialGoogleOptions = {\n colors: orderedColors,\n\n // do not set width, height - the chart resizes itself\n // width: state.chartWidth(),\n // height: state.chartHeight(),\n lineWidth: chartType === \"line\" ? 2 : 1,\n title,\n fontSize: 11,\n hAxis: {\n // title: \"Time of Day\",\n // format:'HH:mm:ss',\n viewWindowMode: \"maximized\",\n slantedText: false,\n format: \"HH:mm:ss\",\n textStyle: {\n fontSize: 9,\n },\n gridlines: {\n color: \"#EEE\",\n },\n },\n vAxis: {\n title: unitsCurrent,\n viewWindowMode: (chartType === \"area\" || chartType === \"stacked\")\n ? \"maximized\"\n : \"pretty\",\n minValue: chartType === \"stacked\" ? undefined : -0.1,\n maxValue: chartType === \"stacked\" ? undefined : 0.1,\n direction: 1,\n textStyle: {\n fontSize: 9,\n },\n gridlines: {\n color: \"#EEE\",\n },\n },\n chartArea: {\n width: \"65%\",\n height: \"80%\",\n },\n focusTarget: \"category\",\n annotation: {\n 1: {\n style: \"line\",\n },\n },\n pointsVisible: false,\n titlePosition: \"out\",\n titleTextStyle: {\n fontSize: 11,\n },\n tooltip: {\n isHtml: false,\n ignoreBounds: true,\n textStyle: {\n fontSize: 9,\n },\n },\n curveType: \"function\" as \"function\",\n areaOpacity,\n isStacked: chartType === \"stacked\",\n }\n\n const googleInstance = [\"area\", \"stacked\"].includes(chartMetadata.chart_type)\n ? new window.google.visualization.AreaChart(chartElement.current)\n : new window.google.visualization.LineChart(chartElement.current)\n\n googleInstance.draw(dataTable, initialGoogleOptions)\n\n googleOptions.current = initialGoogleOptions\n googleChartInstance.current = googleInstance\n }\n }, [attributes, chartData.result, chartMetadata, chartElement, hasApiBeenLoaded, orderedColors,\n unitsCurrent])\n\n\n return (\n <div\n ref={chartElement}\n id={chartElementId}\n className={chartElementClassName}\n />\n )\n}\n","import React from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { EasyPieChartData } from \"domains/chart/chart-types\"\n\ninterface Props {\n attributes: Attributes\n chartData: EasyPieChartData\n chartElementClassName: string\n chartElementId: string\n}\nexport const TextOnly = ({\n attributes,\n chartData,\n chartElementClassName,\n chartElementId,\n}: Props) => {\n const { textOnlyDecimalPlaces = 1, textOnlyPrefix = \"\", textOnlySuffix = \"\" } = attributes\n\n // Round based on number of decimal places to show\n const precision = 10 ** textOnlyDecimalPlaces\n const value = Math.round(chartData.result[0] * precision) / precision\n\n const textContent = chartData.result.length === 0 ? \"\" : textOnlyPrefix + value + textOnlySuffix\n\n return (\n <div id={chartElementId} className={chartElementClassName}>\n {textContent}\n </div>\n )\n}\n","/* eslint-disable no-param-reassign */\n// @ts-nocheck\n\nexport const defaultCellSize = 11\nexport const defaultPadding = 1\nexport const defaultAspectRatio = Math.round(16 / 9)\n\nexport const getCellBoxSize = (cellSize = defaultCellSize, padding = defaultPadding) =>\n cellSize - padding\nexport const getRows = (data, aspectRatio = defaultAspectRatio) =>\n Math.sqrt(data.length / aspectRatio)\nexport const getColumns = (rows, aspectRatio = defaultAspectRatio) => rows * aspectRatio\n\nexport const getXPosition = (columns, index, cellSize = defaultCellSize) =>\n Math.floor(index % columns) * cellSize\nexport const getYPosition = (columns, index, cellSize = defaultCellSize) =>\n Math.floor(index / columns) * cellSize\n\nexport const getFullWidth = (columns, cellSize = defaultCellSize) => Math.ceil(columns) * cellSize\nexport const getFullHeight = (rows, cellSize = defaultCellSize, padding = defaultCellSize) =>\n Math.ceil(rows) * cellSize + padding\n\nexport const getOffsetPosition = (offset, cellSize = defaultCellSize) =>\n Math.floor(offset / cellSize)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable no-param-reassign */\n// @ts-nocheck\nimport { getCellBoxSize, getXPosition, getYPosition, getOffsetPosition } from \"./utilities\"\n\nexport default (\n el,\n columns,\n total,\n { onMouseenter, onMouseout },\n { cellSize, cellPadding } = {}\n) => {\n let hoveredIndex = -1\n\n const getEvent = index => {\n const rect = el.getBoundingClientRect()\n const offsetX = getXPosition(columns, index, cellSize)\n const offsetY = getYPosition(columns, index, cellSize)\n const left = rect.left + offsetX\n const top = rect.top + offsetY\n const cellBoxSize = getCellBoxSize(cellSize, cellPadding)\n\n return {\n index,\n left,\n top,\n right: left + cellBoxSize,\n bottom: top + cellBoxSize,\n width: cellBoxSize,\n height: cellBoxSize,\n offsetX,\n offsetY,\n }\n }\n\n const mouseout = () => {\n onMouseout(getEvent(hoveredIndex))\n hoveredIndex = -1\n }\n\n const mousemove = e => {\n const { offsetX, offsetY } = e\n const x = getOffsetPosition(offsetX, cellSize)\n const y = getOffsetPosition(offsetY, cellSize)\n const nextHoveredIndex = y * columns + x\n\n if (nextHoveredIndex === hoveredIndex) return\n\n if (hoveredIndex !== -1) mouseout()\n\n if (nextHoveredIndex >= total) return\n\n onMouseenter(getEvent(nextHoveredIndex))\n hoveredIndex = nextHoveredIndex\n }\n\n el.addEventListener(\"mousemove\", mousemove)\n el.addEventListener(\"mouseout\", mouseout)\n return () => {\n el.removeEventListener(\"mousemove\", mousemove)\n el.removeEventListener(\"mouseout\", mouseout)\n }\n}\n","/* eslint-disable object-curly-newline */\n/* eslint-disable comma-dangle */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable no-param-reassign */\n// @ts-nocheck\nimport { scaleLinear, extent } from \"d3\"\nimport {\n getCellBoxSize,\n getRows,\n getColumns,\n getXPosition,\n getYPosition,\n getFullWidth,\n getFullHeight,\n} from \"./utilities\"\nimport registerEvents from \"./events\"\n\nexport const getWidth = (data, { aspectRatio, cellSize } = {}) => {\n const rows = getRows(data, aspectRatio)\n const columns = getColumns(rows, aspectRatio)\n return getFullWidth(columns, cellSize)\n}\n\nconst getCanvasAttributes = (data, { aspectRatio, cellSize, padding } = {}) => {\n const rows = getRows(data, aspectRatio)\n const columns = getColumns(rows, aspectRatio)\n const width = getFullWidth(columns, cellSize)\n const height = getFullHeight(rows, cellSize, padding)\n\n return { width, height, columns: Math.ceil(columns) }\n}\n\nconst defaultColorRange = [\"rgba(198, 227, 246, 0.9)\", \"rgba(14, 154, 255, 0.9)\"]\n\nconst makeGetColor = (values, colorRange = defaultColorRange) =>\n scaleLinear()\n .domain(extent(values, value => value))\n .range(colorRange)\n\nexport default (el, { onMouseenter, onMouseout }, options = {}) => {\n const { cellSize, cellPadding, cellStroke = 2, lineWidth = 1, colorRange } = options\n const canvas = el.getContext(\"2d\")\n\n let activeBox = -1\n let deactivateBox = () => {}\n let activateBox = {}\n let clearEvents = () => {}\n\n const clear = () => {\n deactivateBox()\n clearEvents()\n canvas.clearRect(0, 0, el.width, el.height)\n canvas.beginPath()\n }\n\n const update = ({ data }) => {\n const { width, height, columns } = getCanvasAttributes(data, options)\n el.width = parseInt(width)\n el.height = parseInt(height)\n clear()\n clearEvents()\n const getColor = makeGetColor(data, colorRange)\n\n const drawBox = (value, index) => {\n canvas.fillStyle = getColor(value)\n\n const offsetX = getXPosition(columns, index, cellSize)\n const offsetY = getYPosition(columns, index, cellSize)\n\n if (lineWidth && cellStroke) {\n canvas.clearRect(\n offsetX - lineWidth,\n offsetY - lineWidth,\n getCellBoxSize(cellSize, cellPadding) + cellStroke,\n getCellBoxSize(cellSize, cellPadding) + cellStroke\n )\n }\n\n canvas.fillRect(\n offsetX,\n offsetY,\n getCellBoxSize(cellSize, cellPadding),\n getCellBoxSize(cellSize, cellPadding)\n )\n }\n\n data.forEach(drawBox)\n\n clearEvents = registerEvents(\n el,\n columns,\n data.length,\n {\n onMouseenter,\n onMouseout,\n },\n options\n )\n\n deactivateBox = () => {\n if (activeBox !== -1) drawBox(data[activeBox], activeBox)\n }\n\n activateBox = index => {\n deactivateBox()\n activeBox = index\n\n const offsetX = getXPosition(columns, index, cellSize)\n const offsetY = getYPosition(columns, index, cellSize)\n\n if (lineWidth && cellStroke) {\n canvas.lineWidth = lineWidth\n canvas.strokeStyle = \"#fff\"\n canvas.strokeRect(\n offsetX + lineWidth,\n offsetY + lineWidth,\n getCellBoxSize(cellSize, cellPadding) - cellStroke,\n getCellBoxSize(cellSize, cellPadding) - cellStroke\n )\n }\n }\n }\n\n return {\n clear,\n update,\n activateBox: index => activateBox(index),\n deactivateBox: () => deactivateBox(),\n }\n}\n","/* eslint-disable arrow-body-style */\n// @ts-nocheck\n\nexport default (el) => {\n return el.getBoundingClientRect().top / window.innerHeight > 0.5 ? \"top\" : \"bottom\"\n}\n","/* eslint-disable operator-linebreak */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/jsx-fragments */\n// @ts-nocheck\nimport React, { useRef, useLayoutEffect, Fragment, useState, useCallback } from \"react\"\nimport { Drop } from \"@netdata/netdata-ui\"\nimport drawBoxes from \"./drawBoxes\"\nimport getAlign from \"./getAlign\"\n\ninterface GroupboxData {\n data: number[]\n labels: string[]\n}\n\ninterface GroupBoxProps {\n data: GroupboxData[]\n}\n\nconst aligns = {\n top: { bottom: \"top\" },\n bottom: { top: \"bottom\" },\n}\n\nconst GroupBox = ({ data, renderTooltip, ...options }: GroupBoxProps) => {\n const dataRef = useRef()\n const canvasRef = useRef()\n const boxesRef = useRef()\n\n const [hover, setHover] = useState(null)\n const dropHoverRef = useRef(false)\n const boxHoverRef = useRef(-1)\n const timeoutId = useRef()\n\n const close = () => {\n boxesRef.current.deactivateBox()\n setHover(null)\n dropHoverRef.current = false\n boxHoverRef.current = -1\n }\n\n const closeDrop = () =>\n requestAnimationFrame(() => {\n setHover(currentHover => {\n if (\n !dropHoverRef.current &&\n (boxHoverRef.current === -1 || boxHoverRef.current !== currentHover?.index)\n ) {\n close()\n }\n return currentHover\n })\n })\n\n useLayoutEffect(() => {\n boxesRef.current = drawBoxes(\n canvasRef.current,\n {\n onMouseenter: ({ index, ...rect }) => {\n boxHoverRef.current = index\n boxesRef.current.activateBox(index)\n timeoutId.current = setTimeout(() => {\n setHover({\n target: { getBoundingClientRect: () => rect },\n index,\n rect,\n })\n }, 600)\n },\n onMouseout: () => {\n boxHoverRef.current = -1\n clearTimeout(timeoutId.current)\n closeDrop()\n },\n },\n options\n )\n return () => boxesRef.current.clear()\n }, [])\n\n useLayoutEffect(() => {\n if (\n hover &&\n dataRef.current &&\n dataRef.current.labels[hover.index] !== data.labels[hover.index]\n ) {\n close()\n }\n dataRef.current = data\n boxesRef.current.update(data)\n }, [data])\n\n const onMouseEnter = useCallback(() => {\n dropHoverRef.current = true\n }, [])\n\n const onMouseLeave = useCallback(() => {\n dropHoverRef.current = false\n closeDrop()\n }, [])\n\n const align = hover && getAlign(hover.target)\n\n return (\n <Fragment>\n <canvas data-testid=\"groupBox\" ref={canvasRef} />\n {hover && renderTooltip && (\n <Drop\n align={aligns[align]}\n target={hover.target}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n {renderTooltip(hover.index, align)}\n </Drop>\n )}\n </Fragment>\n )\n}\n\nexport default GroupBox\n","/* eslint-disable operator-linebreak */\n/* eslint-disable object-curly-newline */\n/* eslint-disable arrow-body-style */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/jsx-one-expression-per-line */\n// @ts-nocheck\nimport React, { useRef, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, TextMicro, Popover } from \"@netdata/netdata-ui\"\nimport GroupBox from \"./groupBox\"\nimport { getWidth } from \"./drawBoxes\"\nimport getAlign from \"./getAlign\"\n\ninterface GroupBoxWrapperProps {\n data: any\n title: string\n}\n\nconst Title = styled.span`\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow-x: hidden;\n`\n\nconst Label = styled(Flex).attrs({\n as: TextMicro,\n gap: 1,\n})`\n cursor: default;\n &:hover {\n font-weight: bold;\n }\n`\n\nconst GroupBoxWrapper = ({\n data,\n label,\n groupIndex,\n renderGroupPopover,\n renderBoxPopover,\n}: GroupBoxWrapperProps) => {\n const ref = useRef()\n const align = ref.current && getAlign(ref.current)\n\n const style = useMemo(() => ({ maxWidth: `${getWidth(data.data)}px` }), [data])\n\n const boxPopover =\n renderBoxPopover &&\n ((index, boxAlign) => renderBoxPopover({ group: label, groupIndex, align: boxAlign, index }))\n\n const groupPopover =\n renderGroupPopover && (() => renderGroupPopover({ group: label, groupIndex, align }))\n\n return (\n <Flex data-testid=\"groupBoxWrapper\" column alignItems=\"start\" gap={1} margin={[0, 4, 0, 0]}>\n <Popover content={groupPopover} align={align} plain>\n {({ isOpen, ref: popoverRef, ...rest }) => (\n <Label\n data-testid=\"groupBoxWrapper-title\"\n ref={el => {\n ref.current = el\n popoverRef(el)\n }}\n strong={isOpen}\n style={style}\n {...rest}\n >\n <Title>{label}</Title>\n {data.data.length > 3 && <span>({data.data.length})</span>}\n </Label>\n )}\n </Popover>\n <GroupBox data={data} renderTooltip={boxPopover} />\n </Flex>\n )\n}\n\nconst GroupBoxes = ({ data, labels, renderBoxPopover, renderGroupPopover }: any) => (\n <Flex data-testid=\"groupBoxes\" flexWrap overflow={{ vertical: \"auto\" }} flex>\n {labels.map((label, index) => {\n return data[index].data.length ? (\n <GroupBoxWrapper\n key={label}\n label={label}\n groupIndex={index}\n data={data[index]}\n renderGroupPopover={renderGroupPopover}\n renderBoxPopover={renderBoxPopover}\n />\n ) : null\n })}\n </Flex>\n)\n\nexport default GroupBoxes\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, TextNano } from \"@netdata/netdata-ui\"\n\ninterface LegendProps {\n children?: React.ReactNode\n}\n\nconst LinearColorScaleBar = styled(Flex).attrs({ width: \"120px\", height: \"12px\", round: true })`\n background: linear-gradient(to right, #c6e3f6, #0e9aff);\n`\n\nconst Legend = ({ children }: LegendProps) => (\n <Flex data-testid=\"groupBox-legend\" gap={4} alignItems=\"center\">\n <TextNano strong>{children}</TextNano>\n <Flex gap={2} alignItems=\"center\">\n <TextNano>0%</TextNano>\n <LinearColorScaleBar />\n <TextNano>100%</TextNano>\n </Flex>\n {/* <Flex gap={2} alignItems=\"center\">\n <TextNano strong>Alarms</TextNano>\n <Flex width=\"12px\" height=\"12px\" background=\"error\" round />\n </Flex>\n <Flex gap={2} alignItems=\"center\">\n <TextNano strong>Warnings</TextNano>\n <Flex width=\"12px\" height=\"12px\" background=\"warning\" round />\n </Flex> */}\n </Flex>\n)\n\nexport default Legend\n","// @ts-nocheck\n\nconst labels = {\n k8s_cluster_id: { icon: \"cluster\", title: \"Cluster Id\" },\n k8s_node_name: { icon: \"nodes_hollow\", title: \"Node\" },\n k8s_namespace: { icon: \"cluster_spaces\", title: \"Namespace\" },\n k8s_controller_kind: { icon: \"controller_kind\", title: \"Controller Kind\" },\n k8s_controller_name: { icon: \"controller_name\", title: \"Controller Name\" },\n k8s_pod_name: { icon: \"pod\", title: \"Pod Name\" },\n k8s_container_name: { icon: \"container\", title: \"Container\" },\n}\n\nexport const labelIds = Object.keys(labels)\n\nexport default (id) => {\n if (id in labels) return labels[id]\n // k8s_custom_label -> Custom Label\n const title = id.replace(/_./g, (word) => ` ${word[1].toUpperCase()}`).replace(/^k8s /, \"\")\n return { title, icon: \"node\" }\n}\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Separator = () => <Flex height=\"1px\" width=\"100%\" background=\"separator\" />\n\nexport default Separator\n","/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { H5 } from \"@netdata/netdata-ui\"\n\nconst Header = props => (\n <H5 color=\"bright\" wordBreak=\"break-all\" data-testid=\"k8sPopover-header\" {...props} />\n)\n\nexport default Header\n","/* eslint-disable indent */\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, getColor } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nexport const TabButton = styled(Button).attrs(({ active }) => ({\n flavour: \"borderless\",\n neutral: true,\n themeType: \"dark\",\n className: \"btn\",\n disabled: active,\n \"data-testid\": \"k8sPopoverChart-tab\",\n}))`\n &&& {\n height: initial;\n width: initial;\n padding: 2px 20px;\n ${({ active, theme }) => active && `border-bottom: 3px solid ${getColor(\"bright\")({ theme })};`}\n color: ${({ active, theme }) => getColor(active ? \"bright\" : \"separator\")({ theme })}\n }\n`\n\nconst Tabs = ({ value, onChange, ...rest }) => (\n <Flex data-testid=\"k8sPopoverChart-tabs\" {...rest}>\n <TabButton label=\"Context\" active={value === \"context\"} onClick={() => onChange(\"context\")} />\n <TabButton label=\"Metrics\" active={value === \"metrics\"} onClick={() => onChange(\"metrics\")} />\n </Flex>\n)\n\nexport default Tabs\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, H6, makeFlex } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nconst ExpandButton = styled(makeFlex(Button)).attrs({\n icon: \"chevron_right_s\",\n label: \"More\",\n flavour: \"borderless\",\n neutral: true,\n themeType: \"dark\",\n className: \"btn\",\n alignItems: \"baseline\",\n gap: 1,\n direction: \"rowReverse\",\n})`\n &&& {\n padding: 0;\n margin: 0;\n font-weight: normal;\n height: initial;\n width: initial;\n\n svg {\n height: 6px;\n width: 6px;\n position: initial;\n }\n }\n`\n\nconst Section = ({ title, onExpand, children, noBorder }) => (\n <Flex\n gap={3}\n padding={[0, 0, 3]}\n border={!noBorder && { side: \"bottom\", color: \"separator\" }}\n column\n data-testid=\"k8sPopoverSection\"\n >\n <Flex justifyContent=\"between\" data-testid=\"k8sPopoverSection-header\">\n <H6 color=\"border\" wordBreak=\"break-all\">\n {title}\n </H6>\n {onExpand && <ExpandButton onClick={onExpand} />}\n </Flex>\n <Flex gap={4} column data-testid=\"k8sPopoverSection-content\">\n {children}\n </Flex>\n </Flex>\n)\n\nexport default Section\n","import {\n LOCALSTORAGE_HEIGHT_KEY_PREFIX,\n LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD,\n} from \"domains/chart/components/resize-handler\"\n\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetPortalNodeStyles = (\n attributes: Attributes,\n chartSettings: ChartLibraryConfig,\n shouldAddSpecialHeight: boolean,\n) => {\n height: string | undefined,\n width: string | undefined,\n minWidth: string | undefined\n}\n\nconst oldDefaultHeights = [\"180px\", \"90px\"]\n\nconst getHeightFromLocalStorage = (heightID: string, isLegendOnBottom: boolean) => {\n const persitedHeight = localStorage.getItem(`${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightID}`)\n if (persitedHeight) {\n if (Number.isNaN(Number(persitedHeight))) {\n return null\n }\n return `${isLegendOnBottom\n ? Number(persitedHeight) + LEGEND_BOTTOM_SINGLE_LINE_HEIGHT\n : persitedHeight\n }px`\n }\n\n // We'll support the old key for few months, so that user's custom heights will be working,\n // but we'll save any changes only to the new key.\n const persistedHeightOld = localStorage.getItem(\n `${LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD}${heightID}`,\n )\n if (persistedHeightOld) {\n if (oldDefaultHeights.includes(persistedHeightOld)) {\n // If saved value looks like `oldDefaultHeights`, then it is most likely an automatic value\n // from old dashboard. Don't import it anymore. On next resize the height will be persisted\n // to the new key.\n return null\n }\n return persistedHeightOld\n }\n return null\n}\n\nexport const getPortalNodeStyles: GetPortalNodeStyles = (\n attributes,\n chartSettings,\n shouldAddSpecialHeight,\n) => {\n let width\n if (typeof attributes.width === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n width = attributes.width\n } else if (typeof attributes.width === \"number\") {\n width = `${attributes.width.toString()}px`\n }\n let height\n if (chartSettings.aspectRatio === undefined) {\n if (typeof attributes.height === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n height = attributes.height\n } else if (typeof attributes.height === \"number\") {\n height = `${attributes.height.toString()}px`\n }\n }\n const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n const heightFromLocalStorage = attributes.heightId\n ? getHeightFromLocalStorage(attributes.heightId, isLegendOnBottom)\n : null\n\n if (heightFromLocalStorage) {\n // .replace() is for backwards compatibility - old dashboard was always doing\n // JSON.stringify when setting localStorage so many users have '\"180px\"' values set.\n // We can remove .replace() after some time\n height = heightFromLocalStorage.replace(/\"/g, \"\")\n }\n\n if (shouldAddSpecialHeight) {\n const heightOverriden = isLegendOnBottom\n ? window.innerHeight * 0.5\n : window.innerHeight * 0.4\n height = `${heightOverriden}px`\n }\n\n const chartDefaultsMinWidth = window.NETDATA.chartDefaults.min_width\n const minWidth = chartDefaultsMinWidth === null\n ? undefined\n : chartDefaultsMinWidth\n return {\n height,\n width,\n minWidth,\n }\n}\n","import {\n useEffect, useRef, useState, MutableRefObject,\n} from \"react\"\n\nconst globalIntersectionOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: undefined,\n}\n\ntype IntersectionCallback = (isVisible: boolean) => void\ntype Listener = {\n element: HTMLElement,\n callback: IntersectionCallback,\n}\nconst createGlobalIntersectionObserver = () => {\n let listeners: Listener[] = []\n const globalHandler = (entries: IntersectionObserverEntry[]) => {\n entries.forEach(({ isIntersecting, target }) => {\n const callback = listeners.find(({ element }) => element === target)?.callback\n if (callback) {\n callback(isIntersecting)\n }\n })\n }\n const globalObserver = new IntersectionObserver(globalHandler, globalIntersectionOptions)\n\n return {\n subscribe: (element: HTMLElement, callback: IntersectionCallback) => {\n globalObserver.observe(element)\n listeners = listeners.concat({ element, callback })\n },\n unsubscribe: (elementToUnsubscribe: HTMLElement) => {\n listeners = listeners.filter(({ element }) => element !== elementToUnsubscribe)\n },\n }\n}\nconst globalIntersectionObserver = createGlobalIntersectionObserver()\n\n\n// this hook is created for 2 reasons:\n// 1) to use the same IntersectionObserver for all charts (contrary to use-intersection from\n// react-use, which creates new observer for every hook)\n// 2) to update the isVisible state only when necessary (contrary to what \"use-in-view\" hook from\n// https://github.com/thebuilder/react-intersection-observer does)\nexport const useCommonIntersection = (\n element: HTMLElement,\n clonedChildrenRef: MutableRefObject<HTMLElement | undefined>,\n) => {\n const [isVisible, setIsVisible] = useState(false)\n const isVisibleRef = useRef(isVisible)\n // the ref is just to prevent most updates on init - charts are not visible on first intersection\n // observer callback, but it still tries to set the state. UseState does not bail out when\n // state doesn't change\n\n useEffect(() => {\n if (typeof IntersectionObserver === \"function\") {\n globalIntersectionObserver.subscribe(\n element,\n (newIsVisible) => {\n if (isVisibleRef.current !== newIsVisible) {\n if (clonedChildrenRef.current) {\n // eslint-disable-next-line no-param-reassign\n clonedChildrenRef.current.style.visibility = newIsVisible ? \"visible\" : \"hidden\"\n }\n\n isVisibleRef.current = newIsVisible\n // we need to mirror it in `use-state` to cause react update\n setIsVisible(newIsVisible)\n }\n },\n )\n }\n return () => {\n globalIntersectionObserver.unsubscribe(element)\n }\n }, [clonedChildrenRef, element])\n\n return isVisible\n}\n","import React from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\n\ninterface Props {\n attributes: Attributes\n}\n\n// rendered on init (for example when chart is not visible)\n// and when it's rendering after being hidden previously\nexport const InvisibleSearchableText = ({\n attributes,\n}: Props) => (\n <span style={{ position: \"absolute\", opacity: 0, width: 0 }}>\n {attributes.id}\n </span>\n)\n","import React, {\n useEffect, useLayoutEffect, useState, useRef,\n} from \"react\"\nimport { useDebounce } from \"react-use\"\nimport { forEachObjIndexed } from \"ramda\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { selectDestroyOnHide, selectIsAsyncOnScroll, selectAlarm } from \"domains/global/selectors\"\nimport { getPortalNodeStyles } from \"domains/chart/utils/get-portal-node-styles\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\nimport { useCommonIntersection } from \"hooks/use-common-intersection\"\n\nimport { clearChartStateAction } from \"../actions\"\n\nimport { InvisibleSearchableText } from \"./invisible-searchable-text\"\n\nconst SCROLL_DEBOUNCE_ASYNC = 750\nconst SCROLL_DEBOUNCE_SYNC = 100\n\nconst cloneWithCanvas = (element: HTMLElement) => {\n const cloned = element.cloneNode(true) as HTMLElement\n const clonedCanvases = cloned.querySelectorAll(\"canvas\")\n\n element.querySelectorAll(\"canvas\")\n .forEach((oldCanvas, index) => {\n const newCanvas = clonedCanvases[index]\n const context = newCanvas.getContext(\"2d\")\n\n newCanvas.width = oldCanvas.width\n newCanvas.height = oldCanvas.height\n\n if (context) {\n context.drawImage(oldCanvas, 0, 0)\n }\n })\n return cloned\n}\n\nconst shouldCleanChartStateAlways = localStorage.getItem(\"wipe-chart-state\")\n\ninterface Props {\n attributes: Attributes\n chartUuid: string\n children: any\n portalNode: HTMLElement\n}\nexport const DisableOutOfView = ({\n attributes,\n chartUuid,\n children,\n portalNode,\n}: Props) => {\n /* when unmounting, clear redux state for this chart */\n const dispatch = useDispatch()\n useEffect(() => { // eslint-disable-line arrow-body-style\n return () => {\n dispatch(clearChartStateAction({ id: chartUuid }))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n /* separate functionality - adding custom styles to portalNode */\n const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n const [hasPortalNodeBeenStyled, setHasPortalNodeBeenStyled] = useState<boolean>(false)\n const isShowingAlarmOnChart = useSelector(selectAlarm)?.chartId === attributes.id\n useLayoutEffect(() => {\n if (hasPortalNodeBeenStyled) {\n return\n }\n const shouldAddSpecialHeight = isShowingAlarmOnChart\n && attributes.chartLibrary === \"dygraph\"\n && chartSettings.hasLegend(attributes)\n const styles = getPortalNodeStyles(attributes, chartSettings, shouldAddSpecialHeight)\n forEachObjIndexed((value, styleName) => {\n if (value) {\n portalNode.style.setProperty(styleName, value)\n }\n }, styles)\n // eslint-disable-next-line no-param-reassign\n portalNode.className = chartSettings.containerClass(attributes)\n setHasPortalNodeBeenStyled(true)\n }, [attributes, chartSettings, hasPortalNodeBeenStyled, isShowingAlarmOnChart, portalNode,\n setHasPortalNodeBeenStyled ])\n /* end of \"adding custom styles to portalNode\" */\n\n\n const destroyOnHide = useSelector(selectDestroyOnHide)\n\n const clonedChildrenRef = useRef<HTMLElement>()\n const isVisibleIntersection = useCommonIntersection(portalNode, clonedChildrenRef)\n\n // todo hook to scroll (observe on visible items) instead of changes in intersectionRatio\n // because intersectinnRatio maxes out on 1.0 when element is fully visible\n const isAsyncOnScroll = useSelector(selectIsAsyncOnScroll)\n const debounceTime = isAsyncOnScroll ? SCROLL_DEBOUNCE_ASYNC : SCROLL_DEBOUNCE_SYNC\n\n // \"should hide because of debounced scroll handler\"\n const [shouldHideDebounced, setShouldHideDebounced] = useState(!isVisibleIntersection)\n useDebounce(\n () => {\n // start rendering, when intersectionRatio is not 0 and it hasn't changed for 1500 ms\n setShouldHideDebounced(!isVisibleIntersection)\n },\n debounceTime,\n [isVisibleIntersection],\n )\n const shouldHide = isVisibleIntersection ? shouldHideDebounced : true\n\n const previousIsVisibleIntersection = useRef(isVisibleIntersection)\n if (clonedChildrenRef.current\n && previousIsVisibleIntersection.current !== isVisibleIntersection\n ) {\n previousIsVisibleIntersection.current = isVisibleIntersection\n }\n\n useEffect(() => {\n if (!isPrintMode && shouldHide && shouldCleanChartStateAlways) {\n dispatch(clearChartStateAction({ id: chartUuid }))\n }\n }, [chartUuid, dispatch, shouldHide])\n\n\n if (isPrintMode) {\n // we should show everything in this case\n return children\n }\n\n if (shouldHide) {\n // todo perhaps loader should be added here to both scenarios\n if (destroyOnHide) {\n return (\n <InvisibleSearchableText attributes={attributes} />\n )\n }\n\n if (!clonedChildrenRef.current) {\n const newClonedChildren = Array.from(portalNode.children)\n .map((child) => cloneWithCanvas(child as HTMLElement))\n\n const clonedChildrenContainer = document.createElement(\"div\")\n clonedChildrenContainer.style.visibility = \"hidden\"\n\n newClonedChildren.forEach((child) => {\n clonedChildrenContainer.appendChild(child)\n })\n\n clonedChildrenRef.current = clonedChildrenContainer\n }\n\n return (\n <>\n <InvisibleSearchableText attributes={attributes} />\n <div\n ref={(nodeElement) => {\n if (nodeElement && clonedChildrenRef.current) {\n nodeElement.appendChild(clonedChildrenRef.current)\n }\n }}\n />\n </>\n )\n }\n\n if (!destroyOnHide && clonedChildrenRef.current) {\n clonedChildrenRef.current = undefined\n }\n\n return children\n}\n","import React from \"react\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../../chart-types\"\nimport { ChartWithLoader, RenderCustomElementForDygraph } from \"../chart-with-loader\"\nimport { DisableOutOfView } from \"../disable-out-of-view\"\nimport { DropdownMenu } from \"../chart-dropdown\"\n\nexport type Props = {\n attributes: Attributes\n // warning! this is not the same as chartId in old dashboard\n // here, the chartID must be unique across all agents\n chartUuid: string\n uuid?: string\n portalNode: HTMLElement\n chartMetadata?: ChartMetadata | undefined\n dropdownMenu?: DropdownMenu\n renderCustomElementForDygraph?: RenderCustomElementForDygraph\n onAttributesChange?: any\n}\n\nexport const ChartContainer = ({\n attributes,\n chartMetadata,\n chartUuid,\n dropdownMenu,\n portalNode,\n renderCustomElementForDygraph,\n onAttributesChange,\n uuid,\n}: Props) => (\n <DisableOutOfView attributes={attributes} portalNode={portalNode} chartUuid={chartUuid}>\n <ChartWithLoader\n attributes={attributes}\n chartUuid={chartUuid}\n renderCustomElementForDygraph={renderCustomElementForDygraph}\n onAttributesChange={onAttributesChange}\n dropdownMenu={dropdownMenu}\n externalChartMetadata={chartMetadata}\n portalNode={portalNode}\n uuid={uuid}\n />\n </DisableOutOfView>\n)\n","/* eslint-disable max-len */\nimport { ChartsMetadata } from \"domains/global/types\"\nimport { AnyStringKeyT } from \"types/common\"\nimport { ChartEnriched } from \"domains/chart/chart-types\"\n\nexport interface Submenus {\n [submenus: string]: {\n charts: ChartEnriched[]\n height: number\n info: string | null\n priority: number\n title: string | null\n }\n}\n\nexport interface CorrelationMetadata {\n scoredCount?: number\n totalCount?: number\n averageScore?: number\n}\n\nexport interface Menu {\n // eslint-disable-next-line camelcase\n menu_pattern: string\n priority: number\n submenus: Submenus\n title: string\n icon: string\n info: string\n height: number\n correlationsMetadata?: CorrelationMetadata\n}\n\nexport interface Menus {\n [menu: string]: Menu\n}\n\nexport const options = {\n menus: {} as Menus,\n submenu_names: {} as {[family: string]: string},\n data: null as (ChartsMetadata | null),\n hostname: \"netdata_server\", // will be overwritten by the netdata server\n version: \"unknown\",\n release_channel: \"unknown\",\n hosts: [],\n\n duration: 0, // the default duration of the charts\n update_every: 1,\n\n chartsPerRow: 0,\n // chartsMinWidth: 1450,\n chartsHeight: 180,\n}\n\n\n// netdata standard information\nexport const netdataDashboard = {\n sparklines_registry: {} as {[key: string]: { count: number }},\n os: \"unknown\",\n\n menu: {},\n submenu: {} as {\n [family: string]: {\n info?: string | ((os: string) => string)\n title?: string\n }\n },\n context: {} as {\n [id: string]: {\n valueRange: string // examples: \"[0, 100]\", \"[null, null]\"\n height: number\n decimalDigits: number\n }},\n\n // generate a sparkline\n // used in the documentation\n sparkline(\n prefix: string, chart: string, dimension: string, units: string = \"\", suffix: string,\n ) {\n if (options.data === null || typeof options.data.charts === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart] === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart].dimensions === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart].dimensions[dimension] === \"undefined\") {\n return \"\"\n }\n\n let key = `${chart}.${dimension}`\n\n if (typeof this.sparklines_registry[key] === \"undefined\") {\n this.sparklines_registry[key] = { count: 1 }\n } else {\n this.sparklines_registry[key].count += 1\n }\n\n key = `${key}.${this.sparklines_registry[key].count}`\n\n return `${prefix}<div class=\"netdata-container\" data-netdata=\"${chart}\" data-after=\"-120\"\n data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\"\n data-dygraph-theme=\"sparkline\" data-dimensions=\"${dimension}\"\n data-show-value-of-${dimension}-at=\"${key}\"></div>\n (<span id=\"${key}\" style=\"display: inline-block; min-width: 50px; text-align: right;\">\n X</span>${units})${suffix}`\n },\n\n gaugeChart(\n title: string, width: string, dimensions: string = \"\", colors: string = \"\",\n ) {\n return `${\"<div class=\\\"netdata-container\\\" data-netdata=\\\"CHART_UNIQUE_ID\\\"\"\n + \" data-dimensions=\\\"\"}${dimensions}\"`\n + \" data-chart-library=\\\"gauge\\\"\"\n + \" data-gauge-adjust=\\\"width\\\"\"\n + ` data-title=\"${title}\"`\n + ` data-width=\"${width}\"`\n + \" data-before=\\\"0\\\"\"\n + \" data-after=\\\"-CHART_DURATION\\\"\"\n + \" data-points=\\\"CHART_DURATION\\\"\"\n + ` data-colors=\"${colors}\"`\n + \" role=\\\"application\\\"></div>\"\n },\n\n anyAttribute(obj: AnyStringKeyT, attr: string, key: string, def: unknown) {\n if (typeof (obj[key]) !== \"undefined\") {\n const x = obj[key][attr]\n\n if (typeof (x) === \"undefined\") {\n return def\n }\n\n if (typeof (x) === \"function\") {\n return x(netdataDashboard.os)\n }\n\n return x\n }\n\n return def\n },\n\n menuTitle(chart: ChartEnriched) {\n if (chart.sectionTitle) {\n return chart.sectionTitle\n }\n if (typeof chart.menu_pattern !== \"undefined\") {\n const type = chart.type || chart.id.split(\".\")[0]\n return (`${this.anyAttribute(this.menu, \"title\", chart.menu_pattern, chart.menu_pattern)\n .toString()\n } ${type.slice(-(type.length - chart.menu_pattern.length - 1)).toString()}`)\n .replace(/_/g, \" \")\n }\n\n return (this.anyAttribute(this.menu, \"title\", chart.menu, chart.menu)).toString()\n .replace(/_/g, \" \")\n },\n\n menuIcon(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"icon\", chart.menu_pattern,\n \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\").toString()\n }\n\n return this.anyAttribute(this.menu, \"icon\", chart.menu, \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\")\n },\n\n menuInfo(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"info\", chart.menu_pattern, null)\n }\n\n return this.anyAttribute(this.menu, \"info\", chart.menu, null)\n },\n\n menuHeight(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"height\", chart.menu_pattern, 1.0)\n }\n\n return this.anyAttribute(this.menu, \"height\", chart.menu, 1.0)\n },\n\n submenuTitle(menu: string, submenu: string) {\n const key = `${menu}.${submenu}`\n // console.log(key);\n const title = this.anyAttribute(this.submenu, \"title\", key, submenu)\n .toString().replace(/_/g, \" \") as string\n if (title.length > 28) {\n const a = title.substring(0, 13)\n const b = title.substring(title.length - 12, title.length)\n return `${a}...${b}`\n }\n return title\n },\n\n submenuInfo(menu: string, submenu: string) {\n const key = `${menu}.${submenu}`\n return this.anyAttribute(this.submenu, \"info\", key, null) as (string | null)\n },\n\n submenuHeight(menu: string, submenu: string, relative: number) {\n const key = `${menu}.${submenu}`\n return this.anyAttribute(this.submenu, \"height\", key, 1.0) * relative\n },\n\n contextInfo(id: string) {\n const x = this.anyAttribute(this.context, \"info\", id, null)\n\n if (x !== null) {\n return `<div class=\"shorten dashboard-context-info\"\n role=\"document\">${x}</div>`\n }\n return \"\"\n },\n\n contextValueRange(id: string) {\n if (typeof this.context[id] !== \"undefined\"\n && typeof this.context[id].valueRange !== \"undefined\"\n ) {\n try {\n return JSON.parse(this.context[id].valueRange)\n } catch (e) {\n return [null, null]\n }\n }\n return [null, null]\n },\n\n contextHeight(id: string, def: number) {\n if (typeof this.context[id] !== \"undefined\" && typeof this.context[id].height !== \"undefined\") {\n return def * this.context[id].height\n }\n return def\n },\n\n contextDecimalDigits(id: string, def: number) {\n if (typeof this.context[id] !== \"undefined\"\n && typeof this.context[id].decimalDigits !== \"undefined\"\n ) {\n return this.context[id].decimalDigits\n }\n return def\n },\n}\n\n// @ts-ignore\nwindow.netdataDashboard = netdataDashboard\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable operator-linebreak */\n/* eslint-disable arrow-body-style */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { useFormatters } from \"domains/chart/utils/formatters\"\nimport { netdataDashboard } from \"domains/dashboard/utils/netdata-dashboard\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nconst Title = styled(Text)`\n text-overflow: ellipsis;\n max-width: 120px;\n overflow-x: hidden;\n`\n\nconst getUnitSign = unit => {\n return unit === \"percentage\" ? \"%\" : ` ${unit.replace(/milliseconds/, \"ms\")}`\n}\n\nconst aggrMethods = {\n avg: \"Average\",\n sum: \"Sum\",\n min: \"Min\",\n max: \"Max\",\n}\nconst getAggregation = value => `${aggrMethods[value]}` || \"\"\n\nconst ChartValueContainer = memo(({ id, units, aggrMethod, displayedIndex }) => {\n const chartData = useSelector((state: AppStateT) => selectChartData(state, { id }))\n\n const value =\n typeof displayedIndex === \"number\"\n ? chartData.result[displayedIndex]\n : chartData.view_latest_values[0]\n\n const { legendFormatValue, unitsCurrent } = useFormatters({\n attributes: {},\n data: chartData,\n units,\n unitsCommon: null,\n unitsDesired: null,\n uuid: id,\n })\n\n const aggregation = getAggregation(aggrMethod)\n\n return (\n <Text\n wordBreak=\"keep-all\"\n color=\"bright\"\n margin={[0, 0, 0, \"auto\"]}\n data-testid=\"k8sPopoverChart-chartValue\"\n >\n {aggregation && (\n <Text margin={[0, 1, 0, 0]} color=\"separator\" data-testid=\"k8sPopoverChart-chartValue-aggr\">\n {aggregation}\n </Text>\n )}\n {legendFormatValue(value)}\n {getUnitSign(unitsCurrent)}\n </Text>\n )\n})\n\nconst ChartValue = ({ id, ...rest }) => {\n const chartData = useSelector((state: AppStateT) => selectChartData(state, { id }))\n\n if (!chartData || chartData.result.length === 0) return null\n return <ChartValueContainer id={id} {...rest} />\n}\n\nconst ChartOverview = ({ id, chartMetadata, aggrMethod, displayedIndex }) => {\n const { units, context } = chartMetadata\n const title = context.replace(/cgroup\\./, \"\")\n const icon = netdataDashboard.menuIcon(chartMetadata)\n\n return (\n <Flex gap={2} data-testid=\"k8sPopoverChart-overview\">\n <Text color=\"bright\" dangerouslySetInnerHTML={{ __html: icon }} />\n <Title color=\"bright\" data-testid=\"k8sPopoverChart-title\">\n {title}\n </Title>\n <ChartValue id={id} units={units} aggrMethod={aggrMethod} displayedIndex={displayedIndex} />\n </Flex>\n )\n}\n\nexport default memo(ChartOverview)\n","/* eslint-disable comma-dangle */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useRef, useContext, useLayoutEffect, useState, memo, useMemo } from \"react\"\nimport { throttle } from \"throttle-debounce\"\nimport { ChartContainer } from \"domains/chart/components/chart-container\"\nimport { ThemeContext } from \"styled-components\"\nimport { Flex, getColor } from \"@netdata/netdata-ui\"\nimport ChartOverview from \"./chartOverview\"\n\nconst Chart = ({ groupLabel, postGroupLabel, id, attributes, relatedIndex }) => {\n const theme = useContext(ThemeContext)\n const chartContainerRef = useRef()\n const [displayedIndex, setDisplayedIndex] = useState()\n const setDisplayedIndexThrottled = useMemo(() => throttle(400, setDisplayedIndex), [])\n const [, repaint] = useState()\n\n useLayoutEffect(() => {\n repaint(true)\n }, [])\n\n const { chartMetadata, attributes: relatedChartAttributes } = attributes.relatedCharts[\n relatedIndex\n ]\n\n const chartAttributes = useMemo(\n () => ({\n id: chartMetadata.id,\n\n width: \"100%\",\n height: \"60px\",\n\n chartLibrary: \"sparkline\",\n sparklineLineWidth: \"2px\",\n sparklineLineColor: getColor(\"border\")({ theme }),\n sparklineFillColor: getColor(\"disabled\")({ theme }),\n sparklineSpotRadius: 0,\n sparklineDisableTooltips: true,\n sparklineOnHover: (event) => setDisplayedIndexThrottled(event?.x),\n\n httpMethod: \"POST\",\n host: attributes.host,\n nodeIDs: attributes.nodeIDs,\n dimensions: relatedChartAttributes.dimensions,\n aggrMethod: relatedChartAttributes.aggrMethod,\n\n labels: {\n k8s_cluster_id: [chartMetadata.chartLabels.k8s_cluster_id[0]],\n [attributes.groupBy]: [groupLabel],\n ...(postGroupLabel && { [attributes.postGroupBy]: [postGroupLabel] }),\n },\n }),\n [chartMetadata, attributes]\n )\n\n return (\n <Flex gap={2} column data-testid=\"k8sPopoverChart\">\n <div\n ref={chartContainerRef}\n style={{ height: \"60px\", width: \"100%\" }}\n data-testid=\"k8sPopoverChart-container\"\n >\n {chartContainerRef.current && (\n <ChartContainer\n chartUuid={id}\n attributes={chartAttributes}\n chartMetadata={chartMetadata}\n portalNode={chartContainerRef.current}\n />\n )}\n </div>\n <ChartOverview\n id={id}\n aggrMethod={chartAttributes.aggrMethod}\n chartMetadata={chartMetadata}\n displayedIndex={displayedIndex}\n />\n </Flex>\n )\n}\n\nexport default memo(Chart)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport styled from \"styled-components\"\nimport { Text, Flex, Icon } from \"@netdata/netdata-ui\"\n\nconst ExternalButton = styled(Icon).attrs({\n margin: [0, 0, 0, \"auto\"],\n color: \"bright\",\n width: \"10px\",\n height: \"10px\",\n alignSelf: \"center\",\n name: \"nav_arrow_goto\",\n role: \"button\",\n title: \"Go to node\",\n \"data-testid\": \"k8sPopoverItem-externalButton\",\n})`\n cursor: pointer;\n`\n\nconst Item = ({ icon, title, secondary, onClick }) => (\n <Flex gap={1} alignItems=\"start\" data-testid=\"k8sPopoverItem\">\n <Flex width=\"22px\" height=\"22px\" data-testid=\"k8sPopoverItem-icon\">\n <Icon name={icon} color=\"bright\" margin={[0, 1, 0, 0]} width=\"22px\" height=\"22px\" />\n </Flex>\n <Text color=\"bright\" data-testid=\"k8sPopoverItem-title\">\n {title}\n </Text>\n {secondary && (\n <Text color=\"border\" wordBreak=\"break-all\" data-testid=\"k8sPopoverItem-detail\">\n {secondary}\n </Text>\n )}\n {onClick && <ExternalButton onClick={onClick} />}\n </Flex>\n)\n\nexport default Item\n","/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport Item from \"./item\"\nimport Section from \"./section\"\n\nconst DateItem = ({ date, title }) => {\n const { localeDateString, localeTimeString } = useDateTime()\n\n return (\n <Item\n icon=\"around_clock\"\n title={title}\n secondary={`${localeDateString(date)} | ${localeTimeString(date)}`}\n />\n )\n}\n\nconst DateSection = ({ before, after }) => (\n <Section title=\"Time\">\n <DateItem title=\"From\" date={after} />\n <DateItem title=\"To\" date={before} />\n </Section>\n)\n\nexport default DateSection\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Section from \"./section\"\nimport Chart from \"./chart\"\nimport DateSection from \"./dateSection\"\n\nconst Metrics = ({ groupLabel, postGroupLabel, attributes, viewAfter, viewBefore }) => (\n <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverMetrics\">\n <DateSection after={viewAfter} before={viewBefore} />\n <Section title=\"Metrics\" noBorder>\n <Flex gap={3} column data-testid=\"k8sPopoverMetrics-container\">\n {attributes.relatedCharts.map(({ chartMetadata }, index) => (\n <Chart\n key={chartMetadata.id}\n id={[groupLabel, postGroupLabel, attributes.id, chartMetadata.id].join(\"|\")}\n attributes={attributes}\n relatedIndex={index}\n groupLabel={groupLabel}\n postGroupLabel={postGroupLabel}\n />\n ))}\n </Flex>\n </Section>\n </Flex>\n)\n\nexport default Metrics\n","/* eslint-disable no-param-reassign */\n/* eslint-disable comma-dangle */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Item from \"./item\"\nimport Section from \"./section\"\nimport getLabel, { labelIds } from \"./getLabel\"\n\nconst LabelsSection = ({ labelId, items, onExpand, onItemClick, ...rest }) => {\n const { title, icon } = getLabel(labelId)\n const sliced = items.slice(0, 3)\n const expandable = items.length > 3\n\n const text = expandable ? `${title} (${items.length})` : title\n return (\n <Section title={text} onExpand={expandable && onExpand} {...rest}>\n {sliced.map((item) => (\n <Item\n key={item}\n icon={icon}\n title={item}\n onClick={onItemClick && (() => onItemClick(item))}\n />\n ))}\n </Section>\n )\n}\n\nconst getLabelIds = (chartLabels) => {\n chartLabels = { ...chartLabels }\n const predefinedLabelIds = labelIds.reduce((acc, labelId) => {\n if (!(labelId in chartLabels)) return acc\n\n delete chartLabels[labelId]\n return [...acc, labelId]\n }, [])\n\n return [...predefinedLabelIds, ...Object.keys(chartLabels)]\n}\n\nconst Context = ({ chartLabels, onExpand, onNodeClick }) => {\n const ids = getLabelIds(chartLabels)\n\n return (\n <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverContext\">\n {ids.map((id, index) => (\n <LabelsSection\n key={id}\n labelId={id}\n items={chartLabels[id]}\n onExpand={() => onExpand(id)}\n noBorder={index === ids.length - 1}\n onItemClick={id === \"k8s_node_name\" && onNodeClick}\n />\n ))}\n </Flex>\n )\n}\n\nexport default memo(Context)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, makeFlex } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Item from \"./item\"\nimport getLabel from \"./getLabel\"\n\nconst StyledButton = styled(makeFlex(Button)).attrs({\n flavour: \"borderless\",\n neutral: true,\n themeType: \"dark\",\n className: \"btn\",\n alignItems: \"start\",\n gap: 1,\n})`\n &&& {\n padding: 0;\n margin: 0;\n height: initial;\n width: initial;\n\n svg {\n height: 18px;\n width: 18px;\n position: initial;\n }\n }\n`\n\nconst List = ({ labelId, items, onBack, onItemClick }) => {\n const { title, icon } = getLabel(labelId)\n\n return (\n <Flex height=\"100%\" gap={3} data-testid=\"k8sPopoverList\" column>\n <Header>\n <StyledButton\n label={`${title} (${items.length})`}\n icon=\"chevron_left\"\n onClick={onBack}\n data-testid=\"k8sPopoverList-back\"\n />\n </Header>\n <Separator />\n <Flex\n gap={3}\n overflow={{ vertical: \"auto\", horizontal: \"hidden\" }}\n column\n data-testid=\"k8sPopoverList-container\"\n >\n {items.map((item) => (\n <Item\n key={item}\n icon={icon}\n title={item}\n onClick={onItemClick && (() => onItemClick(item))}\n />\n ))}\n </Flex>\n </Flex>\n )\n}\n\nexport default List\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useState } from \"react\"\nimport { Flex, DropContainer } from \"@netdata/netdata-ui\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Tabs from \"./tabs\"\nimport Metrics from \"./metrics\"\nimport Context from \"./context\"\nimport List from \"./list\"\n\nconst Container = (props) => (\n <DropContainer\n background={[\"transparent\", \"popover\"]}\n padding={[2, 4]}\n width=\"322px\"\n height=\"422px\"\n {...props}\n />\n)\n\nconst TabsContainer = ({ label, value, onChange, children }) => (\n <Flex height=\"100%\" column>\n <Header>{label}</Header>\n <Tabs value={value} onChange={onChange} margin={[4, 0, 0, 0]} />\n <Separator />\n <Flex gap={3} overflow={{ vertical: \"auto\", horizontal: \"hidden\" }} margin={[4, 0, 0, 0]}>\n {children}\n </Flex>\n </Flex>\n)\n\nconst Popover = ({\n title,\n groupLabel,\n postGroupLabel,\n chartLabels,\n attributes,\n viewBefore,\n viewAfter,\n ...rest\n}) => {\n const [view, setView] = useState(\"context\")\n\n const isLabelView = view !== \"context\" && view !== \"metrics\"\n\n const { onNodeClick } = attributes\n\n return (\n <Container data-testid=\"k8sPopover\" {...rest}>\n {isLabelView && (\n <List\n labelId={view}\n items={chartLabels[view]}\n attributes={attributes}\n onBack={() => setView(\"context\")}\n onItemClick={view === \"k8s_node_name\" && onNodeClick}\n />\n )}\n {!isLabelView && (\n <TabsContainer label={title} value={view} onChange={setView}>\n {view === \"context\" && (\n <Context chartLabels={chartLabels} onExpand={setView} onNodeClick={onNodeClick} />\n )}\n {view === \"metrics\" && (\n <Metrics\n groupLabel={groupLabel}\n postGroupLabel={postGroupLabel}\n attributes={attributes}\n viewAfter={viewAfter}\n viewBefore={viewBefore}\n />\n )}\n </TabsContainer>\n )}\n </Container>\n )\n}\n\nexport default Popover\n","/* eslint-disable arrow-body-style */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useMemo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes.ts\"\nimport { ChartTimeframe } from \"domains/chart/components/chart-legend-bottom\"\nimport GroupBoxes from \"domains/chart/components/lib-charts/group-box-chart/groupBoxes\"\nimport Legend from \"domains/chart/components/lib-charts/group-box-chart/legend\"\nimport getLabel from \"./getLabel\"\nimport transform from \"./transform\"\nimport Popover from \"./popover\"\n\ninterface Props {\n chartData: any\n chartMetadata: ChartMetadata\n attributes: Attributes\n viewAfter: number\n viewBefore: number\n hoveredRow: number\n hoveredX: number | null\n showUndefined: boolean\n}\n\nconst Kubernetes = ({\n chartData,\n chartMetadata,\n attributes,\n viewAfter,\n viewBefore,\n hoveredRow,\n hoveredX,\n showUndefined,\n}: Props) => {\n const { filteredRows } = attributes\n const { data: groupBoxData, labels, chartLabels } = useMemo(\n () => transform(chartData, filteredRows),\n [filteredRows, chartData]\n )\n\n const {\n id,\n result: { data },\n groupBy,\n postGroupBy,\n } = chartData\n\n const renderBoxPopover = ({ groupIndex, index, align }) => {\n const label = groupBoxData[groupIndex].labels[index]\n const { title } = getLabel(postGroupBy)\n\n return (\n <Popover\n align={align}\n title={`${title}: ${label}`}\n groupLabel={labels[groupIndex]}\n postGroupLabel={label}\n chartLabels={groupBoxData[groupIndex].chartLabels[index]}\n attributes={attributes}\n viewBefore={viewBefore}\n viewAfter={viewAfter}\n />\n )\n }\n\n const renderGroupPopover = ({ groupIndex, align }) => {\n const label = labels[groupIndex]\n const { title } = getLabel(groupBy)\n\n return (\n <Popover\n align={align}\n title={`${title}: ${label}`}\n groupLabel={label}\n chartLabels={chartLabels[groupIndex]}\n attributes={attributes}\n viewBefore={viewBefore}\n viewAfter={viewAfter}\n />\n )\n }\n\n const groupedBoxesData = useMemo(() => {\n return groupBoxData.map((groupedBox) => {\n return {\n labels: groupedBox.labels,\n data:\n hoveredRow === -1 || hoveredRow > data.length || !(hoveredRow in data)\n ? groupedBox.postAggregated\n : groupedBox.indexes.map((index) => data[hoveredRow][index + 1]) || [],\n }\n })\n }, [data, groupBoxData, hoveredRow])\n\n return (\n <Flex column width=\"100%\" height=\"100%\" gap={4} padding={[4, 2]}>\n <GroupBoxes\n data={groupedBoxesData}\n labels={labels}\n renderBoxPopover={renderBoxPopover}\n renderGroupPopover={renderGroupPopover}\n />\n <Flex data-testid=\"legend-container\" justifyContent=\"between\">\n <Legend>{id}</Legend>\n <ChartTimeframe\n chartMetadata={chartMetadata}\n showUndefined={showUndefined}\n hoveredX={hoveredX}\n viewBefore={viewBefore}\n chartData={chartData}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Kubernetes\n","/* eslint-disable arrow-body-style */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\n\nexport default (chartData, filteredRows) => {\n const { keys, labels: labelValues, groupBy, postGroupBy, aggrGroups, postAggregated } = chartData\n const groupValues = keys[groupBy]\n const postGroupValues = keys[postGroupBy]\n const indexes = filteredRows || [...Array(groupValues.length)].map((v, index) => index)\n\n const postGroupData = indexes.reduce((acc: any, index: number) => {\n const groupValue = groupValues[index]\n if (!(groupValue in acc)) {\n acc[groupValue] = {\n labels: [],\n indexes: [],\n chartLabels: [],\n postAggregated: [],\n }\n }\n const boxes = acc[groupValue]\n boxes.indexes.push(index)\n boxes.labels.push(postGroupValues[index])\n boxes.postAggregated.push(postAggregated[index])\n\n const chartLabels = aggrGroups.reduce((labelsAcc, label) => {\n return labelValues[label][index]\n ? { ...labelsAcc, [label]: labelValues[label][index] }\n : labelsAcc\n }, {})\n boxes.chartLabels.push(chartLabels)\n return acc\n }, {})\n\n const labels = Object.keys(postGroupData).sort(\n (a, b) => postGroupData[b].indexes.length - postGroupData[a].indexes.length\n )\n\n const groupData = labels.map((label) => postGroupData[label])\n\n const groupChartLabels = groupData.map((boxes) => {\n return aggrGroups.reduce((acc, label) => {\n const groupLabels = new Set(\n boxes.chartLabels.reduce((accChartLabels, chartLabels) => {\n return chartLabels[label] ? [...accChartLabels, ...chartLabels[label]] : accChartLabels\n }, [])\n )\n return groupLabels.size === 0 ? acc : { ...acc, [label]: Array.from(groupLabels) }\n }, {})\n })\n\n return { labels, data: groupData, chartLabels: groupChartLabels }\n}\n","import React, { useCallback } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { setGlobalChartUnderlayAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { selectSyncPanAndZoom } from \"domains/global/selectors\"\nimport { setChartPanAndZoomAction } from \"domains/chart/actions\"\nimport { useShowValueOutside } from \"hooks/use-show-value-outside\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport {\n ChartData, ChartMetadata, DygraphData, EasyPieChartData, D3pieChartData,\n} from \"../chart-types\"\nimport { chartLibrariesSettings, ChartLibraryName } from \"../utils/chartLibrariesSettings\"\n\nimport { DygraphChart } from \"./lib-charts/dygraph-chart\"\nimport { EasyPieChart } from \"./lib-charts/easy-pie-chart\"\nimport { GaugeChart } from \"./lib-charts/gauge-chart\"\nimport { SparklineChart } from \"./lib-charts/sparkline-chart\"\nimport { D3pieChart } from \"./lib-charts/d3pie-chart\"\nimport { PeityChart } from \"./lib-charts/peity-chart\"\nimport { GoogleChart } from \"./lib-charts/google-chart\"\nimport { TextOnly } from \"./lib-charts/text-only\"\nimport { KubernetesGroupBoxes } from \"./lib-charts/group-box-chart\"\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: ChartData\n chartMetadata: ChartMetadata\n chartLibrary: ChartLibraryName\n colors: {\n [key: string]: string\n }\n chartUuid: string\n chartHeight: number\n chartWidth: number\n dimensionsVisibility: boolean[]\n hasEmptyData: boolean\n isRemotelyControlled: boolean\n legendFormatValue: ((v: number | string | null) => number | string)\n orderedColors: string[]\n hoveredX: number | null\n onUpdateChartPanAndZoom: (arg: { after: number, before: number, masterID: string }) => void\n immediatelyDispatchPanAndZoom: () => void\n\n hoveredRow: number\n setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n setMinMax: (minMax: [number, number]) => void\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewAfterForCurrentData: number,\n viewBeforeForCurrentData: number,\n}\n\nexport const AbstractChart = ({\n attributes,\n chartContainerElement,\n chartData,\n chartMetadata,\n chartLibrary,\n colors,\n chartUuid,\n chartHeight,\n chartWidth,\n dimensionsVisibility,\n hasEmptyData,\n isRemotelyControlled,\n legendFormatValue,\n orderedColors,\n hoveredRow,\n hoveredX,\n onUpdateChartPanAndZoom,\n immediatelyDispatchPanAndZoom,\n setHoveredX,\n setMinMax,\n showLatestOnBlur,\n unitsCurrent,\n viewAfterForCurrentData,\n viewBeforeForCurrentData,\n}: Props) => {\n const dispatch = useDispatch()\n\n const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n const setGlobalChartUnderlay = useCallback(({ after, before, masterID }) => {\n dispatch(setGlobalChartUnderlayAction({ after, before, masterID }))\n\n // freeze charts\n // don't send masterID, so no padding is applied\n if (isSyncPanAndZoom) {\n dispatch(setGlobalPanAndZoomAction({\n after: viewAfterForCurrentData,\n before: viewBeforeForCurrentData,\n }))\n } else {\n dispatch(setChartPanAndZoomAction({\n after: viewAfterForCurrentData,\n before: viewBeforeForCurrentData,\n id: chartUuid,\n }))\n }\n }, [chartUuid, dispatch, isSyncPanAndZoom, viewAfterForCurrentData, viewBeforeForCurrentData])\n\n const chartSettings = chartLibrariesSettings[chartLibrary]\n const { hasLegend } = chartSettings\n const chartElementClassName = hasLegend(attributes)\n ? classNames(\n `netdata-chart-with-legend-${attributes.legendPosition || \"right\"}`,\n `netdata-${chartLibrary}-chart-with-legend-right`,\n )\n : classNames(\n \"netdata-chart\",\n `netdata-${chartLibrary}-chart`,\n )\n const chartElementId = `${chartLibrary}-${chartUuid}-chart`\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n useShowValueOutside({\n attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined,\n })\n\n if (chartLibrary === \"easypiechart\") {\n return (\n <EasyPieChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n chartWidth={chartWidth}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n // easyPieChart doesnt support resizing, so lets just create new one when\n // container size changes\n key={chartWidth}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n hoveredRow={hoveredRow}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"gauge\") {\n return (\n <GaugeChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n chartHeight={chartHeight}\n chartWidth={chartWidth}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setHoveredX={setHoveredX}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"sparkline\") {\n return (\n <SparklineChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n orderedColors={orderedColors}\n unitsCurrent={unitsCurrent}\n viewAfterForCurrentData={viewAfterForCurrentData}\n viewBeforeForCurrentData={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"d3pie\") {\n return (\n <D3pieChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as D3pieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n dimensionsVisibility={dimensionsVisibility}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n isRemotelyControlled={isRemotelyControlled}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n />\n )\n }\n\n if (chartLibrary === \"peity\") {\n return (\n <PeityChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n orderedColors={orderedColors}\n />\n )\n }\n\n if (chartLibrary === \"google\") {\n return (\n <GoogleChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n orderedColors={orderedColors}\n unitsCurrent={unitsCurrent}\n />\n )\n }\n\n if (chartLibrary === \"textonly\") {\n return (\n <TextOnly\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n />\n )\n }\n\n if (chartLibrary === \"groupbox\") {\n return (\n <KubernetesGroupBoxes\n chartData={chartData}\n chartMetadata={chartMetadata}\n attributes={attributes}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n showUndefined={showUndefined}\n />\n )\n }\n\n return (\n <DygraphChart\n attributes={attributes}\n chartData={chartData as DygraphData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n hasEmptyData={hasEmptyData}\n hasLegend={hasLegend(attributes)}\n isRemotelyControlled={isRemotelyControlled}\n orderedColors={orderedColors}\n immediatelyDispatchPanAndZoom={immediatelyDispatchPanAndZoom}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setHoveredX={setHoveredX}\n setMinMax={setMinMax}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n}\n","import { useEffect, useRef } from \"react\"\nimport { isEmpty } from \"ramda\"\nimport { useMount } from \"react-use\"\n\nimport { ChartData, DygraphData } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartLibraryConfig } from \"domains/chart/utils/chartLibrariesSettings\"\n\n\ninterface UseShowValueOutsideArgument {\n attributes: Attributes\n chartData: ChartData\n chartSettings: ChartLibraryConfig\n hoveredRow: number\n legendFormatValue: ((v: number | string | null) => number | string)\n showUndefined: boolean\n}\n\n// example of the attribute:\n// show-value-of-iowait-at: \"system.cpu.iowait.1\"\n\nexport const useShowValueOutside = ({\n attributes,\n chartData,\n chartSettings,\n hoveredRow,\n legendFormatValue,\n showUndefined,\n}: UseShowValueOutsideArgument) => {\n // a ref to store found elements, just once per lifetime of component\n const showValueAttributesNodes = useRef<(HTMLElement | null)[]>([])\n\n // find the nodes that will have populated values\n useMount(() => {\n const { showValueOf } = attributes\n // showValueOf will be undefined if not used, but additional isEmpty check can prevent\n // regression performance issue in the future\n if (!showValueOf || isEmpty(showValueOf)) {\n return\n }\n const dimensionNames = chartData.dimension_names\n const dimensionIds = chartData.dimension_ids\n dimensionNames.forEach((dimensionName, i) => {\n const userElementId = showValueOf[`show-value-of-${dimensionName.toLowerCase()}`]\n || showValueOf[`show-value-of-${dimensionIds[i].toLowerCase()}-at`]\n\n // if element is not found, just add null\n showValueAttributesNodes.current = showValueAttributesNodes.current.concat(\n document.getElementById(userElementId),\n )\n })\n })\n\n useEffect(() => {\n if (showValueAttributesNodes.current.length) {\n const chartSettingCallOptions = chartSettings.options(attributes)\n const isFlipped = chartSettingCallOptions.includes(\"flip\")\n\n // \"objectrows\" is for d3pie, which has different data format\n if (chartData.format === \"json\" && !chartSettingCallOptions.includes(\"objectrows\")) {\n const { data } = (chartData as DygraphData).result\n const valueIndex = hoveredRow === -1\n ? (data.length - 1)\n : (hoveredRow) // because data for easy-pie-chart are flipped\n\n // yes, \"flipped\" value means chronological order (from oldest to newest) :)\n const rowIndex = isFlipped ? valueIndex : (data.length - valueIndex - 1)\n const row = data[rowIndex]\n\n chartData.dimension_names.forEach((dimensionName, dimensionIndex) => {\n const value = (showUndefined || !row)\n ? \"\"\n : legendFormatValue(row[dimensionIndex + 1])\n const element = showValueAttributesNodes.current[dimensionIndex]\n if (element) {\n element.innerText = `${value}`\n }\n })\n }\n }\n }, [attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined])\n}\n","import { __, prop } from \"ramda\"\nimport React, { useEffect, useState, useCallback, useMemo, memo, useContext } from \"react\"\nimport { ThemeContext } from \"styled-components\"\nimport { useDebouncedCallback } from \"use-debounce\"\n\nimport {\n requestCommonColorsAction,\n setDefaultAfterAction,\n setGlobalPanAndZoomAction,\n setGlobalSelectionAction,\n} from \"domains/global/actions\"\nimport {\n createSelectAssignedColors,\n selectGlobalSelection,\n selectSyncPanAndZoom,\n selectSyncSelection,\n selectUnitsScalingMethod,\n} from \"domains/global/selectors\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { TimeRange } from \"types/common\"\nimport { MS_IN_SECOND, isTimestamp } from \"utils/utils\"\n\nimport { setChartPanAndZoomAction } from \"domains/chart/actions\"\n\nimport { getPanAndZoomStep } from \"../utils/get-pan-and-zoom-step\"\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"../utils/chartLibrariesSettings\"\nimport { useFormatters } from \"../utils/formatters\"\nimport { ChartData, ChartMetadata } from \"../chart-types\"\n\nimport { ChartLegend } from \"./chart-legend\"\nimport { LegendToolbox } from \"./legend-toolbox\"\nimport { ResizeHandler } from \"./resize-handler\"\nimport { AbstractChart } from \"./abstract-chart\"\n\ninterface GlobalPanAndZoomState {\n after: number // timestamp in ms\n before: number // timestamp in ms\n masterID?: string\n shouldForceTimeRange?: boolean\n}\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: ChartData\n chartMetadata: ChartMetadata\n chartHeight: number\n chartUuid: string\n chartWidth: number\n defaultAfter: number\n globalPanAndZoom: null | GlobalPanAndZoomState\n hasEmptyData: boolean\n isRemotelyControlled: boolean\n viewRangeForCurrentData: TimeRange\n viewRange: TimeRange\n selectedDimensions: string[]\n setSelectedDimensions: (newState: string[]) => void\n showLatestOnBlur: boolean\n}\n\nexport const Chart = memo(\n ({\n attributes,\n attributes: { chartLibrary },\n chartContainerElement,\n chartData,\n chartMetadata,\n chartHeight,\n chartUuid,\n chartWidth,\n defaultAfter,\n globalPanAndZoom,\n hasEmptyData,\n isRemotelyControlled,\n viewRangeForCurrentData,\n viewRange,\n selectedDimensions,\n setSelectedDimensions,\n showLatestOnBlur,\n }: Props) => {\n const themeContext = useContext(ThemeContext)\n const unitsScalingMethod = useSelector(selectUnitsScalingMethod)\n const chartSettings = chartLibrariesSettings[chartLibrary]\n const { hasLegend } = chartSettings\n const {\n units = chartMetadata.units,\n unitsCommon,\n unitsDesired = unitsScalingMethod,\n } = attributes\n\n // we need to have empty selectedDimensions work as {all enabled}, in case\n // new dimensions show up (when all are enabled, the new dimensions should also auto-enable)\n const dimensionsVisibility = useMemo(\n () =>\n chartData.dimension_names.map(dimensionName =>\n selectedDimensions.length === 0 ? true : selectedDimensions.includes(dimensionName)\n ),\n [chartData.dimension_names, selectedDimensions]\n )\n\n const shouldDisplayToolbox =\n hasLegend(attributes) && window.NETDATA.options.current.legend_toolbox\n\n const shouldDisplayResizeHandler =\n shouldDisplayToolbox &&\n window.NETDATA.options.current.resize_charts && // legacy way of turning off for print mode\n !attributes.hideResizeHandler\n\n const dispatch = useDispatch()\n const allDimensionNames = useMemo(() => {\n // metadata and chartData dimensions match each other, but we need to first parse\n // dimensions from metadata, to keep the same order (when browser parsers dimensions object,\n // it sorts them in *some* way which is hard to reproduce). And people can get used to colors\n // so let's keep them as they were before\n const dimensionNamesFromMetadata = Object.values(chartMetadata.dimensions).map(x => x.name)\n const additionalDimensionNamesFromData = chartData.dimension_names.filter(\n x => !dimensionNamesFromMetadata.includes(x)\n )\n return dimensionNamesFromMetadata.concat(additionalDimensionNamesFromData)\n }, [chartData.dimension_names, chartMetadata.dimensions])\n useEffect(() => {\n dispatch(\n requestCommonColorsAction({\n chartContext: chartMetadata.context,\n chartUuid,\n colorsAttribute: attributes.colors,\n commonColorsAttribute: attributes.commonColors,\n dimensionNames: allDimensionNames,\n })\n )\n }, [\n allDimensionNames,\n attributes.colors,\n attributes.commonColors,\n chartMetadata.context,\n chartUuid,\n dispatch,\n ])\n\n const { legendFormatValue, legendFormatValueDecimalsFromMinMax, unitsCurrent } = useFormatters({\n attributes,\n data: chartData,\n units,\n unitsCommon,\n unitsDesired,\n uuid: chartUuid,\n })\n\n const [localHoveredX, setLocalHoveredX] = useState<number | null>(null)\n\n const isSyncSelection = useSelector(selectSyncSelection)\n const handleSetHoveredX = useCallback(\n (newHoveredX, noMaster) => {\n if (isSyncSelection) {\n const action = noMaster\n ? { chartUuid: null, hoveredX: newHoveredX }\n : { chartUuid, hoveredX: newHoveredX }\n dispatch(setGlobalSelectionAction(action))\n } else {\n setLocalHoveredX(newHoveredX)\n }\n },\n [chartUuid, dispatch, isSyncSelection]\n )\n const globalHoveredX = useSelector(selectGlobalSelection)\n const hoveredX = isSyncSelection ? globalHoveredX : localHoveredX\n\n // time-frames for requested data (even when request is pending)\n const viewAfter = isTimestamp(viewRange[0]) ? viewRange[0] : chartData.after * MS_IN_SECOND\n const viewBefore = isTimestamp(viewRange[1]) ? viewRange[1] : chartData.before * MS_IN_SECOND\n\n const viewAfterForCurrentData = isTimestamp(viewRangeForCurrentData[0])\n ? viewRangeForCurrentData[0]\n : chartData.after * MS_IN_SECOND\n const viewBeforeForCurrentData = isTimestamp(viewRangeForCurrentData[1])\n ? viewRangeForCurrentData[1]\n : chartData.before * MS_IN_SECOND // when 'before' is 0 or negative\n\n const netdataFirst = chartData.first_entry * MS_IN_SECOND\n const netdataLast = chartData.last_entry * MS_IN_SECOND\n\n // old dashboard persists min duration based on first chartWidth, i assume it's a bug\n // and will update fixedMinDuration when width changes\n const fixedMinDuration = useMemo(\n () => Math.round((chartWidth / 30) * chartMetadata.update_every * MS_IN_SECOND),\n [chartMetadata.update_every, chartWidth]\n )\n\n const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n\n const setGlobalPanAndZoomDebounced = useDebouncedCallback(\n newGlobalPanAndZoom => {\n dispatch(setGlobalPanAndZoomAction(newGlobalPanAndZoom))\n },\n 400 // corresponds to global_pan_sync_time in old dashboard\n )\n\n const immediatelyDispatchPanAndZoom = useCallback(() => {\n setGlobalPanAndZoomDebounced.flush()\n }, [setGlobalPanAndZoomDebounced])\n\n /**\n * pan-and-zoom handler (both for toolbox and mouse events)\n */\n const handleUpdateChartPanAndZoom = useCallback(\n ({\n after,\n before,\n callback,\n shouldFlushImmediately = false,\n shouldForceTimeRange,\n shouldNotExceedAvailableRange,\n }) => {\n if (before < after) {\n return\n }\n let minDuration = fixedMinDuration\n\n const currentDuraton = Math.round(viewBefore - viewAfter)\n\n let afterForced = Math.round(after)\n let beforeForced = Math.round(before)\n const viewUpdateEvery = chartData.view_update_every * MS_IN_SECOND\n\n if (shouldNotExceedAvailableRange) {\n const first = netdataFirst + viewUpdateEvery\n const last = netdataLast + viewUpdateEvery\n // first check \"before\"\n if (beforeForced > last) {\n afterForced -= before - last\n beforeForced = last\n }\n\n if (afterForced < first) {\n afterForced = first\n }\n }\n\n // align them to update_every\n // stretching them further away\n afterForced -= afterForced % viewUpdateEvery\n beforeForced += viewUpdateEvery - (beforeForced % viewUpdateEvery)\n\n // the final wanted duration\n let wantedDuration = beforeForced - afterForced\n\n // to allow panning, accept just a point below our minimum\n if (currentDuraton - viewUpdateEvery < minDuration) {\n minDuration = currentDuraton - viewUpdateEvery\n }\n\n // we do it, but we adjust to minimum size and return false\n // when the wanted size is below the current and the minimum\n // and we zoom\n let doCallback = true\n if (wantedDuration < currentDuraton && wantedDuration < minDuration) {\n minDuration = fixedMinDuration\n\n const dt = (minDuration - wantedDuration) / 2\n beforeForced += dt\n afterForced -= dt\n wantedDuration = beforeForced - afterForced\n doCallback = false\n }\n\n const tolerance = viewUpdateEvery * 2\n const movement = Math.abs(beforeForced - viewBefore)\n\n if (\n Math.abs(currentDuraton - wantedDuration) <= tolerance &&\n movement <= tolerance &&\n doCallback\n ) {\n return\n }\n\n if (isSyncPanAndZoom) {\n setGlobalPanAndZoomDebounced.callback({\n after: afterForced,\n before: beforeForced,\n masterID: chartUuid,\n shouldForceTimeRange,\n })\n if (shouldFlushImmediately) {\n setGlobalPanAndZoomDebounced.flush()\n }\n } else {\n dispatch(\n setChartPanAndZoomAction({\n after: afterForced,\n before: beforeForced,\n id: chartUuid,\n shouldForceTimeRange,\n })\n )\n }\n\n if (doCallback && typeof callback === \"function\") {\n callback(afterForced, beforeForced)\n }\n },\n [\n chartData.view_update_every,\n chartUuid,\n dispatch,\n fixedMinDuration,\n isSyncPanAndZoom,\n netdataFirst,\n netdataLast,\n setGlobalPanAndZoomDebounced,\n viewAfter,\n viewBefore,\n ]\n )\n\n /**\n * toolbox handlers\n */\n const handleToolBoxPanAndZoom = useCallback(\n (after: number, before: number) => {\n const newAfter = Math.max(after, netdataFirst)\n const newBefore = Math.min(before, netdataLast)\n handleUpdateChartPanAndZoom({\n after: newAfter,\n before: newBefore,\n shouldForceTimeRange: true,\n shouldFlushImmediately: true,\n })\n },\n [handleUpdateChartPanAndZoom, netdataFirst, netdataLast]\n )\n\n const handleToolboxLeftClick = useCallback(\n (event: React.MouseEvent) => {\n const step = (viewBefore - viewAfter) * getPanAndZoomStep(event)\n const newBefore = viewBefore - step\n const newAfter = viewAfter - step\n if (newAfter >= netdataFirst) {\n handleToolBoxPanAndZoom(newAfter, newBefore)\n }\n },\n [handleToolBoxPanAndZoom, netdataFirst, viewAfter, viewBefore]\n )\n\n const handleToolboxRightClick = useCallback(\n (event: React.MouseEvent) => {\n const timeWindow = viewBefore - viewAfter\n const step = timeWindow * getPanAndZoomStep(event)\n const newBefore = Math.min(viewBefore + step, netdataLast)\n const newAfter = newBefore - timeWindow\n handleToolBoxPanAndZoom(newAfter, newBefore)\n },\n [handleToolBoxPanAndZoom, netdataLast, viewAfter, viewBefore]\n )\n\n const handleToolboxZoomInClick = useCallback(\n (event: React.MouseEvent) => {\n const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n if (!globalPanAndZoom) {\n dispatch(\n setDefaultAfterAction({\n after: Math.round(defaultAfter / (panAndZoomStep + 1)),\n })\n )\n return\n }\n // if visible time range is much bigger than available time range in history, first zoom-in\n // should just fit to available range\n if (viewBefore - viewAfter > (netdataLast - netdataFirst) * 1.2) {\n handleToolBoxPanAndZoom(netdataFirst, netdataLast)\n return\n }\n const dt = ((viewBefore - viewAfter) * panAndZoomStep) / 2\n const newAfter = viewAfter + dt\n const newBefore = viewBefore - dt\n handleToolBoxPanAndZoom(newAfter, newBefore)\n },\n [\n defaultAfter,\n dispatch,\n globalPanAndZoom,\n handleToolBoxPanAndZoom,\n netdataFirst,\n netdataLast,\n viewAfter,\n viewBefore,\n ]\n )\n\n const handleToolboxZoomOutClick = useCallback(\n (event: React.MouseEvent) => {\n const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n if (!globalPanAndZoom) {\n dispatch(\n setDefaultAfterAction({\n after: Math.round(defaultAfter * (panAndZoomStep + 1)),\n })\n )\n return\n }\n const dt =\n ((viewBefore - viewAfter) / (1.0 - panAndZoomStep * 0.8) - (viewBefore - viewAfter)) / 2\n const newAfter = viewAfter - dt\n const newBefore = viewBefore + dt\n handleToolBoxPanAndZoom(newAfter, newBefore)\n },\n [defaultAfter, dispatch, globalPanAndZoom, handleToolBoxPanAndZoom, viewAfter, viewBefore]\n )\n\n /**\n * assign colors\n */\n const selectAssignedColors = useMemo(\n () =>\n createSelectAssignedColors({\n chartContext: chartMetadata.context,\n chartUuid,\n colorsAttribute: attributes.colors,\n commonColorsAttribute: attributes.commonColors,\n }),\n [attributes.colors, attributes.commonColors, chartMetadata, chartUuid]\n )\n const colors = useSelector(selectAssignedColors)\n const orderedColors = useMemo(\n () => chartData.dimension_names.map(prop(__, colors)),\n [chartData, colors]\n )\n\n if (!colors) {\n return <span /> // wait for createSelectAssignedColors reducer result to come back\n }\n\n const isTimeVisible = hoveredX && hoveredX >= viewAfter && hoveredX <= viewBefore\n const viewUpdateEvery = chartData.view_update_every * MS_IN_SECOND\n const hoveredRow = isTimeVisible\n ? Math.floor(((hoveredX as number) - chartData.after * MS_IN_SECOND) / viewUpdateEvery)\n : -1\n\n const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n const legendToolbox = (\n <LegendToolbox\n onToolboxLeftClick={handleToolboxLeftClick}\n onToolboxRightClick={handleToolboxRightClick}\n onToolboxZoomInClick={handleToolboxZoomInClick}\n onToolboxZoomOutClick={handleToolboxZoomOutClick}\n />\n )\n\n const resizeHandler = shouldDisplayResizeHandler && (\n <ResizeHandler\n chartContainerElement={chartContainerElement}\n chartUuid={chartUuid}\n heightId={attributes.heightId}\n isLegendOnBottom={isLegendOnBottom}\n />\n )\n\n return (\n <>\n <AbstractChart\n // remount on theme change\n key={themeContext.name}\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData}\n chartMetadata={chartMetadata}\n chartLibrary={chartLibrary}\n colors={colors}\n chartUuid={chartUuid}\n chartHeight={chartHeight}\n chartWidth={chartWidth}\n dimensionsVisibility={dimensionsVisibility}\n hasEmptyData={hasEmptyData}\n onUpdateChartPanAndZoom={handleUpdateChartPanAndZoom}\n immediatelyDispatchPanAndZoom={immediatelyDispatchPanAndZoom}\n isRemotelyControlled={isRemotelyControlled}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n hoveredX={hoveredX}\n hoveredRow={hoveredRow}\n setHoveredX={handleSetHoveredX}\n setMinMax={([min, max]) => legendFormatValueDecimalsFromMinMax(min, max)}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewAfterForCurrentData={viewAfterForCurrentData}\n viewBeforeForCurrentData={viewBeforeForCurrentData}\n />\n {hasLegend(attributes) && (\n <ChartLegend\n attributes={attributes}\n chartUuid={chartUuid}\n chartMetadata={chartMetadata}\n chartLibrary={chartLibrary}\n colors={colors}\n hoveredX={hoveredX}\n hoveredRow={hoveredRow}\n legendFormatValue={legendFormatValue}\n selectedDimensions={selectedDimensions}\n setSelectedDimensions={setSelectedDimensions}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewBefore={viewBefore}\n legendToolbox={legendToolbox}\n resizeHandler={resizeHandler}\n />\n )}\n {shouldDisplayToolbox && !isLegendOnBottom && legendToolbox}\n {!isLegendOnBottom && resizeHandler}\n </>\n )\n }\n)\n","import styled from \"styled-components\"\nimport { getColor, Icon } from \"@netdata/netdata-ui\"\n\nexport const DropdownItem = styled.div`\n display: flex;\n flex-direction: start;\n align-items: center;\n color: ${getColor([\"neutral\", \"limedSpruce\"])};\n white-space: nowrap;\n & > svg use {\n fill: ${getColor([\"neutral\", \"limedSpruce\"])};\n }\n`\n\nexport const DropdownItemLabel = styled.span`\n margin-left: 12px;\n`\n\nexport const DotsBtn = styled(Icon)`\n width: 6px;\n height: 10px;\n cursor: pointer;\n & use {\n fill: ${getColor([\"neutral\", \"limedSpruce\"])};\n & :hover {\n fill: ${getColor([\"neutral\", \"regentgrey\"])};\n }\n }\n`\n","import React, { useState, ReactNode } from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\n\nimport { List, SimpleListItem } from \"@rmwc/list\"\nimport { MenuSurface, MenuSurfaceAnchor } from \"@rmwc/menu\"\n\nimport * as S from \"./styled\"\n\ninterface DropdownMenuCallbackProps {\n attributes: Attributes,\n chartMetadata: ChartMetadata,\n chartID: string,\n}\n\nexport type DropdownMenu = {\n icon: ReactNode,\n label: string,\n onClick: (dropdownMenuCallbackProps: DropdownMenuCallbackProps) => void,\n}[]\n\ninterface Props {\n attributes: Attributes\n chartID: string\n chartMetadata: ChartMetadata\n dropdownMenu: DropdownMenu\n}\n\nexport const ChartDropdown = ({\n attributes,\n chartID,\n chartMetadata,\n dropdownMenu,\n}: Props) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleClose = () => {\n setIsOpen(false)\n }\n\n return (\n <>\n <S.DotsBtn\n name=\"dots_2x3\"\n onClick={() => {\n setIsOpen(true)\n }}\n />\n <MenuSurfaceAnchor>\n <MenuSurface open={isOpen} onClose={handleClose}>\n <List>\n {dropdownMenu.map(({ icon, label, onClick }) => (\n <SimpleListItem\n key={label}\n text={(\n <S.DropdownItem>\n {icon}\n <S.DropdownItemLabel>\n {label}\n </S.DropdownItemLabel>\n </S.DropdownItem>\n )}\n onClick={() => {\n onClick({ attributes, chartMetadata, chartID })\n handleClose()\n }}\n />\n ))}\n </List>\n </MenuSurface>\n </MenuSurfaceAnchor>\n </>\n )\n}\n","import { prop } from \"ramda\"\nimport styled, { keyframes } from \"styled-components\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nconst circleAnimation = keyframes`\n 0% {\n opacity: .1;\n }\n 50% {\n opacity: .5;\n }\n 100% {\n opacity: .1;\n }\n`\n\n\nexport const SpinnerContainer = styled.div<{ top: number, right: number }>`\n position: absolute;\n top: ${prop(\"top\")}px;\n right: ${prop(\"right\")}px;\n display: flex;\n`\n\nexport const Circle = styled.div<{ size: number }>`\n width: ${prop(\"size\")}px;\n height: ${prop(\"size\")}px;\n background: ${getColor(\"border\")};\n border-radius: 50%;\n animation: 1s linear infinite both ${circleAnimation};\n`\n\nexport const Circle2 = styled(Circle)<{ spaceBetween: number }>`\n animation-delay: .3s; \n margin-left: ${prop(\"spaceBetween\")}px;\n`\n\nexport const Circle3 = styled(Circle)<{ spaceBetween: number }>`\n animation-delay: .6s; \n margin-left: ${prop(\"spaceBetween\")}px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\ninterface Props {\n chartLibrary: string\n}\nexport const ChartSpinner = ({\n chartLibrary,\n}: Props) => {\n const top = chartLibrary === \"dygraph\" ? 33 : 0\n const right = chartLibrary === \"dygraph\" ? 8 : 0\n const size = chartLibrary === \"dygraph\" ? 10 : 7\n const spaceBetween = chartLibrary === \"dygraph\" ? 4 : 2\n return (\n <S.SpinnerContainer top={top} right={right}>\n <S.Circle size={size} />\n <S.Circle2 size={size} spaceBetween={spaceBetween} />\n <S.Circle3 size={size} spaceBetween={spaceBetween} />\n </S.SpinnerContainer>\n )\n}\n","import styled from \"styled-components\"\n\nimport { chartDropdownZIndex } from \"styles/z-index\"\n\nexport const ChartDropdownContainer = styled.div`\n position: absolute;\n top: 0;\n left: 40px;\n width: 20px;\n height: 20px;\n z-index: ${chartDropdownZIndex};\n`\n","export const notificationsZIndex = \"z-index: 50;\"\n\nexport const chartDropdownZIndex = 10\n\nexport const spacesBarZIndex = 8\n\nexport const spacePanelZIndex = 6\n\nexport const appHeaderZIndex = 5\n\n// the same as in cloud\nexport const portalSidebarZIndex = \"z-index: 35;\"\nexport const customDropdownZIndex = \"z-index: 45;\"\nexport const dialogsZIndex = 60\n","import { cond, always, T } from \"ramda\"\nimport axios from \"axios\"\nimport React, { useEffect, useState, useMemo, useLayoutEffect } from \"react\"\nimport { useThrottle, useUpdateEffect, useUnmount, useDebounce } from \"react-use\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\n\nimport {\n selectGlobalPanAndZoom,\n selectGlobalSelection,\n selectShouldEliminateZeroDimensions,\n selectPanAndZoomDataPadding,\n selectSnapshot,\n selectSpacePanelTransitionEndIsActive,\n selectDefaultAfter,\n} from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { CHART_UNMOUNTED } from \"utils/netdata-sdk\"\nimport { getCorrectedPoints } from \"utils/fill-missing-data\"\n\nimport { fallbackUpdateTimeInterval, panAndZoomDelay } from \"../../constants\"\nimport { getChartURLOptions } from \"../../utils/get-chart-url-options\"\nimport { chartLibrariesSettings } from \"../../utils/chartLibrariesSettings\"\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { getChartPixelsPerPoint } from \"../../utils/get-chart-pixels-per-point\"\nimport { useFetchNewDataClock } from \"../../hooks/use-fetch-new-data-clock\"\n\nimport { fetchChartAction, fetchDataAction } from \"../../actions\"\nimport {\n selectChartData,\n selectChartFetchDataParams,\n makeSelectChartMetadataRequest,\n selectChartPanAndZoom,\n selectChartIsFetchingData,\n selectChartViewRange,\n} from \"../../selectors\"\nimport {\n ChartData,\n ChartMetadata,\n D3pieChartData,\n DygraphData,\n EasyPieChartData,\n} from \"../../chart-types\"\n\nimport { Loader } from \"../loader\"\nimport { Chart } from \"../chart\"\nimport { ChartDropdown, DropdownMenu } from \"../chart-dropdown\"\nimport { ChartSpinner } from \"../chart-spinner/chart-spinner\"\n\nimport * as S from \"./styled\"\nimport \"./chart-with-loader.css\"\n\nexport type RenderCustomElementForDygraph = (selectedChartConfiguration: {\n attributes: Attributes\n onAttributesChange: any\n chartMetadata: ChartMetadata\n chartID: string\n chartData: ChartData | null\n}) => JSX.Element\n\nconst dimensionsAggrMethodMap = {\n \"sum-of-abs\": \"sum\",\n}\n\nconst emptyArray = [] as any\n\nexport type Props = {\n attributes: Attributes\n chartUuid: string\n uuid?: string\n dropdownMenu?: DropdownMenu\n externalChartMetadata?: ChartMetadata\n portalNode: HTMLElement\n renderCustomElementForDygraph?: RenderCustomElementForDygraph\n onAttributesChange?: any\n}\n\nexport const ChartWithLoader = ({\n attributes,\n chartUuid,\n uuid,\n dropdownMenu,\n externalChartMetadata,\n portalNode,\n renderCustomElementForDygraph,\n onAttributesChange,\n}: Props) => {\n /**\n * fetch chart details\n */\n const { host = serverDefault, id, nodeIDs } = attributes\n const dispatch = useDispatch()\n const selectChartMetadataRequest = useMemo(makeSelectChartMetadataRequest, [])\n const { chartMetadata, isFetchingDetails } = useSelector((state: AppStateT) =>\n selectChartMetadataRequest(state, { chartId: id, id: chartUuid })\n )\n const actualChartMetadata = externalChartMetadata || chartMetadata\n useEffect(() => {\n if (!chartMetadata && !isFetchingDetails && !externalChartMetadata) {\n dispatch(\n fetchChartAction.request({\n chart: id,\n id: chartUuid,\n host,\n nodeIDs,\n })\n )\n }\n }, [\n id,\n chartUuid,\n dispatch,\n host,\n isFetchingDetails,\n chartMetadata,\n externalChartMetadata,\n nodeIDs,\n uuid,\n ])\n\n // todo local state option\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const chartPanAndZoom = useSelector((state: AppStateT) =>\n selectChartPanAndZoom(state, { id: chartUuid })\n )\n const panAndZoom = chartPanAndZoom || globalPanAndZoom\n\n const isPanAndZoomMaster =\n (!!globalPanAndZoom && globalPanAndZoom.masterID === chartUuid) || Boolean(chartPanAndZoom)\n const shouldForceTimeRange = panAndZoom?.shouldForceTimeRange || false\n\n // (isRemotelyControlled === false) only during globalPanAndZoom, when chart is panAndZoomMaster\n // and when no toolbox is used at that time\n const isRemotelyControlled = !panAndZoom || !isPanAndZoomMaster || shouldForceTimeRange // used when zooming/shifting in toolbox\n\n const fetchDataParams = useSelector((state: AppStateT) =>\n selectChartFetchDataParams(state, { id: chartUuid })\n )\n const viewRange = useSelector((state: AppStateT) =>\n selectChartViewRange(state, { id: chartUuid })\n )\n const chartData = useSelector((state: AppStateT) => selectChartData(state, { id: chartUuid }))\n const isFetchingData = useSelector((state: AppStateT) =>\n selectChartIsFetchingData(state, { id: chartUuid })\n )\n\n const hoveredX = useSelector(selectGlobalSelection)\n\n // periodical update of newest data\n // default to 2000ms. When chartMetadata has been fetched, use chartMetadata.update_every\n // if chartData has been fetched, use chartData.view_update_every instead\n // todo add support to \"data-update-every\" attribute\n const viewUpdateEvery = cond([\n [always(!!chartData), () => (chartData as ChartData).view_update_every * 1000],\n [\n always(!!actualChartMetadata),\n () => (actualChartMetadata as ChartMetadata).update_every * 1000,\n ],\n [T, always(fallbackUpdateTimeInterval)],\n ])()\n const [shouldFetch, setShouldFetch] = useFetchNewDataClock({\n areCriteriaMet: !panAndZoom && !hoveredX,\n preferedIntervalTime: viewUpdateEvery,\n })\n\n const panAndZoomThrottled = useThrottle(panAndZoom, panAndZoomDelay)\n useEffect(() => {\n setShouldFetch(true)\n }, [panAndZoomThrottled, setShouldFetch])\n\n const defaultAfter = useSelector(selectDefaultAfter)\n // when after/before changes, don't wait for next interval, just fetch immediately\n useUpdateEffect(() => {\n setShouldFetch(true)\n }, [\n attributes.after,\n attributes.before,\n defaultAfter,\n attributes.dimensions,\n attributes.aggrMethod,\n attributes.groupBy,\n ])\n\n const { before: initialBefore = window.NETDATA.chartDefaults.before } = attributes\n\n // attributes.after should be now used only for old custom dashboard\n // and in the future for setting timeframe per-chart\n const liveModeAfter = attributes.after || defaultAfter\n\n const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n const { hasLegend } = chartSettings\n\n // todo optimize by using resizeObserver (optionally)\n const boundingClientRect = portalNode.getBoundingClientRect()\n\n // from old dashboard\n const chartWidth = boundingClientRect.width - (hasLegend(attributes) ? 140 : 0)\n const chartHeight = boundingClientRect.height\n\n const isShowingSnapshot = Boolean(useSelector(selectSnapshot))\n const shouldEliminateZeroDimensions =\n useSelector(selectShouldEliminateZeroDimensions) || isShowingSnapshot\n const shouldUsePanAndZoomPadding = useSelector(selectPanAndZoomDataPadding)\n\n const { CancelToken } = axios\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const cancelTokenSource = useMemo(() => CancelToken.source(), [])\n useUnmount(() => {\n cancelTokenSource.cancel(CHART_UNMOUNTED)\n })\n\n /**\n * spinner state\n * show spinner when it's fetching for more than 2 seconds\n * hide spinner immediately when it's not fetching\n */\n const [shouldShowSpinnerDebounced, setShouldShowSpinnerDebounced] = useState(false)\n const shouldShowSpinner = shouldShowSpinnerDebounced && isFetchingData\n useDebounce(\n () => {\n if (isFetchingData) {\n setShouldShowSpinnerDebounced(true)\n }\n },\n 2000,\n [isFetchingData]\n )\n useEffect(() => {\n if (!isFetchingData && shouldShowSpinnerDebounced) {\n setShouldShowSpinnerDebounced(false)\n }\n }, [isFetchingData, shouldShowSpinnerDebounced])\n\n /**\n * fetch data\n */\n useEffect(() => {\n if (shouldFetch && actualChartMetadata && !isFetchingData) {\n // todo can be overriden by main.js\n const forceDataPoints = window.NETDATA.options.force_data_points\n\n let after\n let before\n let newViewRange\n let pointsMultiplier = 1\n\n if (panAndZoom) {\n if (isPanAndZoomMaster) {\n after = Math.round(panAndZoom.after / 1000)\n before = Math.round(panAndZoom.before / 1000)\n\n newViewRange = [after, before]\n\n if (shouldUsePanAndZoomPadding) {\n const requestedPadding = Math.round((before - after) / 2)\n after -= requestedPadding\n before += requestedPadding\n pointsMultiplier = 2\n }\n } else {\n after = Math.round(panAndZoom.after / 1000)\n before = Math.round(panAndZoom.before / 1000)\n pointsMultiplier = 1\n }\n } else {\n // no panAndZoom\n before = initialBefore\n after = liveModeAfter\n pointsMultiplier = 1\n }\n\n newViewRange = (newViewRange || [after, before]).map(x => x * 1000) as [number, number]\n\n const dataPoints =\n attributes.points ||\n Math.round(chartWidth / getChartPixelsPerPoint({ attributes, chartSettings }))\n const points = forceDataPoints || dataPoints * pointsMultiplier\n\n const shouldForceTimeWindow = attributes.forceTimeWindow || Boolean(defaultAfter)\n // if we want to add fake points, we need first need to request less\n // to have the desired frequency\n // this will be removed when Agents will support forcing time-window between points\n const correctedPoints = shouldForceTimeWindow\n ? getCorrectedPoints({\n after,\n before,\n firstEntry: actualChartMetadata.first_entry,\n points,\n })\n : null\n\n const group = attributes.method || window.NETDATA.chartDefaults.method\n setShouldFetch(false)\n dispatch(\n fetchDataAction.request({\n // properties to be passed to API\n host,\n context: actualChartMetadata.context,\n chart: actualChartMetadata.id,\n format: chartSettings.format,\n points: correctedPoints || points,\n group,\n gtime: attributes.gtime || 0,\n options: getChartURLOptions(attributes, shouldEliminateZeroDimensions),\n after: after || null,\n before: before || null,\n dimensions: attributes.dimensions,\n labels: attributes.labels,\n postGroupBy: attributes.postGroupBy,\n postAggregationMethod: attributes.postAggregationMethod,\n aggrMethod: attributes.aggrMethod,\n aggrGroups: attributes.aggrGroups,\n // @ts-ignore\n dimensionsAggrMethod:\n dimensionsAggrMethodMap[attributes.dimensionsAggrMethod] ||\n attributes.dimensionsAggrMethod,\n nodeIDs,\n httpMethod: attributes.httpMethod,\n groupBy: attributes.groupBy,\n\n // properties for the reducer\n fetchDataParams: {\n // we store it here so it is only available when data is fetched\n // those params should be synced with data\n fillMissingPoints: correctedPoints ? points - correctedPoints : undefined,\n isRemotelyControlled,\n viewRange: newViewRange,\n },\n id: chartUuid,\n cancelTokenSource,\n })\n )\n }\n }, [\n attributes,\n actualChartMetadata,\n chartSettings,\n chartUuid,\n chartWidth,\n defaultAfter,\n dispatch,\n hasLegend,\n host,\n initialBefore,\n isFetchingData,\n isPanAndZoomMaster,\n isRemotelyControlled,\n liveModeAfter,\n panAndZoom,\n portalNode,\n setShouldFetch,\n shouldEliminateZeroDimensions,\n shouldUsePanAndZoomPadding,\n shouldFetch,\n cancelTokenSource,\n nodeIDs,\n uuid,\n ])\n\n useSelector(selectSpacePanelTransitionEndIsActive)\n\n const externalSelectedDimensions = attributes?.selectedDimensions\n const [selectedDimensions, setSelectedDimensions] = useState<string[]>(\n externalSelectedDimensions || emptyArray\n )\n\n useLayoutEffect(() => {\n if (externalSelectedDimensions) {\n setSelectedDimensions(externalSelectedDimensions)\n }\n }, [externalSelectedDimensions])\n\n useLayoutEffect(() => {\n setSelectedDimensions(externalSelectedDimensions || emptyArray)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attributes?.groupBy])\n\n const customElementForDygraph = useMemo(\n () =>\n renderCustomElementForDygraph &&\n renderCustomElementForDygraph({\n onAttributesChange,\n attributes,\n chartMetadata: actualChartMetadata as ChartMetadata,\n chartData,\n chartID: id,\n }),\n [\n onAttributesChange,\n renderCustomElementForDygraph,\n attributes,\n id,\n actualChartMetadata,\n chartData,\n ]\n )\n\n // eslint-disable-next-line max-len\n const hasEmptyData =\n (chartData as DygraphData | D3pieChartData | null)?.result?.data?.length === 0 ||\n (chartData as EasyPieChartData | null)?.result?.length === 0\n\n if (!chartData || !actualChartMetadata) {\n return (\n <>\n <Loader\n // Loader should remount when that flag is changed, because inside\n // there's an oldschool bootstrap icon which doesn't handle updates well\n key={`${hasEmptyData}`}\n hasEmptyData={hasEmptyData}\n containerNode={portalNode}\n />\n {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n </>\n )\n }\n\n return (\n <>\n {hasEmptyData && (\n <Loader key={`${hasEmptyData}`} hasEmptyData={hasEmptyData} containerNode={portalNode} />\n )}\n <Chart\n attributes={attributes}\n chartContainerElement={portalNode}\n chartData={chartData}\n chartMetadata={actualChartMetadata}\n chartUuid={chartUuid}\n chartHeight={chartHeight}\n chartWidth={chartWidth}\n defaultAfter={defaultAfter}\n globalPanAndZoom={globalPanAndZoom}\n hasEmptyData={hasEmptyData}\n isRemotelyControlled={fetchDataParams.isRemotelyControlled}\n // view range that updates only when data is fetched\n viewRangeForCurrentData={fetchDataParams.viewRange}\n // view range that updates when requesting and fetching of data\n viewRange={viewRange!}\n selectedDimensions={selectedDimensions}\n setSelectedDimensions={setSelectedDimensions}\n showLatestOnBlur={!panAndZoom}\n />\n {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n {dropdownMenu && dropdownMenu.length > 0 && (\n <S.ChartDropdownContainer>\n <ChartDropdown\n dropdownMenu={dropdownMenu}\n chartID={id}\n attributes={attributes}\n chartMetadata={actualChartMetadata}\n />\n </S.ChartDropdownContainer>\n )}\n {customElementForDygraph}\n </>\n )\n}\n","import { useEffect, useState } from \"react\"\nimport { useInterval } from \"react-use\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n selectHasWindowFocus,\n selectStopUpdatesWhenFocusIsLost,\n selectGlobalPause,\n} from \"domains/global/selectors\"\nimport { BIGGEST_INTERVAL_NUMBER } from \"utils/biggest-interval-number\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\n\ntype UseFetchNewDataClock = (arg: {\n areCriteriaMet: boolean\n preferedIntervalTime: number\n}) => [boolean, (shouldFetch: boolean) => void]\nexport const useFetchNewDataClock: UseFetchNewDataClock = ({\n areCriteriaMet,\n preferedIntervalTime,\n}) => {\n const hasWindowFocus = useSelector(selectHasWindowFocus)\n const stopUpdatesWhenFocusIsLost = useSelector(selectStopUpdatesWhenFocusIsLost)\n const globalPause = useSelector(selectGlobalPause)\n\n const shouldBeUpdating = !(!hasWindowFocus && stopUpdatesWhenFocusIsLost) && !globalPause\n\n const [shouldFetch, setShouldFetch] = useState<boolean>(true)\n const [shouldFetchImmediatelyAfterFocus, setShouldFetchImmediatelyAfterFocus] = useState(false)\n\n useEffect(() => {\n if (shouldFetchImmediatelyAfterFocus && shouldBeUpdating) {\n setShouldFetchImmediatelyAfterFocus(false)\n setShouldFetch(true)\n }\n }, [shouldFetchImmediatelyAfterFocus, setShouldFetchImmediatelyAfterFocus, shouldBeUpdating])\n\n // don't use setInterval when we loose focus\n const intervalTime =\n (shouldBeUpdating || !shouldFetchImmediatelyAfterFocus) && !isPrintMode\n ? preferedIntervalTime\n : BIGGEST_INTERVAL_NUMBER\n useInterval(() => {\n if (areCriteriaMet) {\n if (!shouldBeUpdating) {\n setShouldFetchImmediatelyAfterFocus(true)\n return\n }\n setShouldFetch(true)\n }\n // when there's no focus, don't ask for updated data\n }, intervalTime)\n return [shouldFetch, setShouldFetch]\n}\n","import { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetChartPixelsPerPoint = (arg: {\n attributes: Attributes,\n chartSettings: ChartLibraryConfig,\n}) => number\n\nexport const getChartPixelsPerPoint: GetChartPixelsPerPoint = ({\n attributes, chartSettings,\n}) => {\n const {\n pixelsPerPoint: pixelsPerPointAttribute,\n } = attributes\n if (typeof pixelsPerPointAttribute === \"number\") {\n return pixelsPerPointAttribute\n }\n const pixelsPerPointSetting = chartSettings.pixelsPerPoint(attributes)\n\n return Math.max(...[\n pixelsPerPointSetting,\n window.NETDATA.options.current.pixels_per_point,\n ].filter((px) => typeof px === \"number\"))\n}\n","import { prop, pick } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\n\nimport { storeKey } from \"./constants\"\n\nconst selectDashboardDomain = (state: AppStateT) => state[storeKey]\n\nexport const selectIsSnapshotMode = createSelector(\n selectDashboardDomain,\n prop(\"isSnapshotMode\"),\n)\n\nexport const selectSnapshotOptions = createSelector(\n selectDashboardDomain,\n pick([\"snapshotCharts\", \"snapshotDataPoints\"]),\n)\n","import React, { useEffect } from \"react\"\n\nimport { MS_IN_SECOND } from \"utils/utils\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { selectIsSnapshotMode, selectSnapshotOptions } from \"domains/dashboard/selectors\"\nimport { selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { TimeRangeObjT } from \"types/common\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { fetchDataForSnapshotAction } from \"../actions\"\nimport { chartLibrariesSettings } from \"../utils/chartLibrariesSettings\"\nimport { getChartURLOptions } from \"../utils/get-chart-url-options\"\n\ninterface SnapshotLoaderProps {\n attributes: Attributes\n chartUuid: string\n}\nconst SnapshotLoader = ({\n attributes,\n chartUuid,\n}: SnapshotLoaderProps) => {\n const host = attributes.host || serverDefault\n const { snapshotDataPoints } = useSelector(selectSnapshotOptions)\n const group = attributes.method || window.NETDATA.chartDefaults.method\n const { chartLibrary } = attributes\n const chartSettings = chartLibrariesSettings[chartLibrary]\n\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const after = (globalPanAndZoom as TimeRangeObjT).after / MS_IN_SECOND\n const before = (globalPanAndZoom as TimeRangeObjT).before / MS_IN_SECOND\n\n const dispatch = useDispatch()\n useEffect(() => {\n dispatch(fetchDataForSnapshotAction.request({\n // properties to be passed to API\n host,\n context: attributes.id,\n chart: attributes.id,\n format: chartSettings.format,\n points: snapshotDataPoints as number,\n group,\n gtime: attributes.gtime || 0,\n // for snapshots, always eliminate zero dimensions\n options: getChartURLOptions(attributes, true),\n after: after || null,\n before: before || null,\n dimensions: attributes.dimensions,\n aggrMethod: attributes.aggrMethod,\n nodeIDs: attributes.nodeIDs,\n chartLibrary,\n id: chartUuid,\n groupBy: attributes.groupBy,\n }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }) // todo fetch based on state\n return null\n}\n\n\ninterface SnapshotLoaderContainerProps {\n attributes: Attributes\n chartUuid: string\n}\nexport const SnapshotLoaderContainer = ({\n attributes,\n chartUuid,\n}: SnapshotLoaderContainerProps) => {\n const isSnapshotMode = useSelector(selectIsSnapshotMode)\n if (!isSnapshotMode) {\n return null\n }\n return <SnapshotLoader attributes={attributes} chartUuid={chartUuid} />\n}\n","import React, { memo } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport { getAttributes } from \"../utils/transformDataAttributes\"\nimport { ChartWithLoader } from \"./chart-with-loader\"\nimport { DisableOutOfView } from \"./disable-out-of-view\"\nimport { SnapshotLoaderContainer } from \"./snapshot-loader\"\n\nconst getNodesArray = () => Array.from(document.querySelectorAll(\"[data-netdata]\"))\n\nexport const Portals = memo(() => {\n const nodes = getNodesArray()\n return (\n <>\n {nodes.map((node, index) => {\n const attributesMapped = getAttributes(node)\n const chartId = `${attributesMapped.id}-${index}`\n return (\n createPortal(\n <>\n <DisableOutOfView\n attributes={attributesMapped}\n chartUuid={chartId}\n portalNode={(node as HTMLElement)}\n >\n <ChartWithLoader\n attributes={attributesMapped}\n // todo change to uuid generator (when we disconnect dashboard.js)\n chartUuid={chartId}\n portalNode={(node as HTMLElement)}\n />\n </DisableOutOfView>\n <SnapshotLoaderContainer\n attributes={attributesMapped}\n chartUuid={chartId}\n />\n </>,\n node,\n )\n )\n })}\n </>\n )\n})\n","import { useEffect, useState } from \"react\"\n\nimport { axiosInstance } from \"utils/api\"\n\nexport const useHttp = <T = unknown>(\n url: string | undefined,\n shouldMakeCall : boolean = true,\n isExternal?: boolean,\n) => {\n const [isFetching, setIsFetching] = useState(false)\n const [isError, setIsError] = useState(false)\n const [data, setData] = useState<T | null>(null)\n useEffect(() => {\n if (shouldMakeCall && url) {\n const options = isExternal\n ? { headers: null, withCredentials: false }\n : {}\n\n setIsFetching(true)\n axiosInstance.get(url, options)\n .then((r) => {\n if (r.data) {\n setData(r.data)\n setIsError(false)\n setIsFetching(false)\n }\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.warn(`error fetching ${url}`, error)\n setIsError(true)\n setIsFetching(false)\n })\n }\n }, [isExternal, shouldMakeCall, url])\n // force triple instead of array\n return [data, isFetching, isError] as [T | null, boolean, boolean]\n}\n","import { ReactNode, useEffect, useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nconst modalRoot = document.getElementById(\"modal-root\") as HTMLElement\n\ntype Props = {\n children: ReactNode\n}\nexport const ModalPortal = ({ children }: Props) => {\n const element = useRef(document.createElement(\"div\"))\n useEffect(() => {\n modalRoot.appendChild(element.current)\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n modalRoot.removeChild(element.current)\n }\n }, [])\n\n return createPortal(children, element.current)\n}\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { ModalPortal } from \"domains/dashboard/components/modal-portal\"\nimport {\n selectAmountOfCharts, selectAmountOfFetchedCharts, selectNameOfAnyFetchingChart,\n} from \"domains/chart/selectors\"\n\nimport \"./print-modal.scss\"\n\nconst TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED = 1000\n\nexport const PrintModal = () => {\n const printModalElement = useRef<HTMLDivElement>(null)\n const isFetchingMetrics = true\n\n useEffect(() => {\n // todo replace bootstrap with newer solution (custom or react-compatible library)\n if (printModalElement.current) {\n const $element = window.$(printModalElement.current)\n $element.modal(\"show\")\n }\n }) // render just once\n\n const amountOfCharts = useSelector(selectAmountOfCharts)\n const amountOfFetchedCharts = useSelector(selectAmountOfFetchedCharts)\n const nameOfAnyFetchingChart = useSelector(selectNameOfAnyFetchingChart)\n\n const percentage = amountOfCharts === 0\n ? 0\n : (amountOfFetchedCharts / amountOfCharts) * 100\n\n useEffect(() => {\n if (percentage === 100) {\n setTimeout(() => {\n // in case browser will not be able to close the window\n window.$(printModalElement.current).modal(\"hide\")\n window.print()\n window.close()\n }, TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED)\n }\n }, [percentage])\n\n\n const progressBarText = nameOfAnyFetchingChart\n && `${Math.round(percentage)}%, ${nameOfAnyFetchingChart}`\n\n\n return (\n <ModalPortal>\n <div\n ref={printModalElement}\n className=\"modal fade\"\n id=\"printModal\"\n tabIndex={-1}\n role=\"dialog\"\n aria-labelledby=\"printModalLabel\"\n data-keyboard=\"false\"\n data-backdrop=\"static\"\n >\n <div className=\"modal-dialog modal-lg\" role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <button\n type=\"button\"\n className={classNames(\n \"close\",\n { \"print-modal__close-button--disabled\": isFetchingMetrics },\n )}\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <h4 className=\"modal-title\" id=\"printModalLabel\">\n Preparing dashboard for printing...\n </h4>\n </div>\n <div className=\"modal-body\">\n Please wait while we initialize and render all the charts on the dashboard.\n <div\n className=\"progress progress-striped active\"\n style={{ height: \"2em\" }}\n >\n <div\n id=\"printModalProgressBar\"\n className=\"progress-bar progress-bar-info\"\n role=\"progressbar\"\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n minWidth: \"2em\",\n width: `${percentage}%`,\n }}\n >\n <span\n id=\"printModalProgressBarText\"\n style={{\n paddingLeft: 10,\n paddingTop: 4,\n fontSize: \"1.2em\",\n textAlign: \"left\",\n width: \"100%\",\n position: \"absolute\",\n display: \"block\",\n color: \"black\",\n }}\n >\n {progressBarText}\n </span>\n </div>\n </div>\n The print dialog will appear as soon as we finish rendering the page.\n </div>\n <div className=\"modal-footer\" />\n </div>\n </div>\n </div>\n </ModalPortal>\n )\n}\n","import styled from \"styled-components\"\nimport { getSizeBy, getColor } from \"@netdata/netdata-ui\"\n\nexport const SocialMediaContainer = styled.div`\n width: 185px;\n padding: ${getSizeBy(2)};\n background: ${getColor(\"borderSecondary\")};\n\n font-size: 12px;\n margin-bottom: ${getSizeBy(3)};\n`\n\nexport const FirstRow = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nexport const GithubCopy = styled.div`\n\n`\n\nexport const GithubCopyLine = styled.div`\n\n`\n\nexport const SocialMediaLink = styled.a`\n &, &:hover {\n color: ${getColor(\"main\")};\n }\n`\n\nexport const GithubStarQuestion = styled(SocialMediaLink)``\n\nexport const GithubIcon = styled(SocialMediaLink)`\n font-size: 24px;\n`\n\nexport const TwitterIcon = styled(SocialMediaLink)`\n font-size: 17px;\n`\n\nexport const FacebookIcon = styled(SocialMediaLink)`\n font-size: 23px;\n`\n\nexport const Separator = styled.div`\n margin-top: ${getSizeBy(2)};\n border-top: 1px solid ${getColor(\"separator\")};\n\n`\nexport const SecondRow = styled.div`\n margin-top: ${getSizeBy(2)};\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const SecondRowText = styled.span`\n font-size: 10px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\nexport const SidebarSocialMedia = () => (\n <S.SocialMediaContainer>\n <S.FirstRow>\n <S.GithubCopy>\n <S.GithubCopyLine>\n Do you like Netdata?\n </S.GithubCopyLine>\n <S.GithubStarQuestion href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n Give us a star!\n </S.GithubStarQuestion>\n </S.GithubCopy>\n <S.GithubIcon href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n <i className=\"fab fa-github\" />\n </S.GithubIcon>\n </S.FirstRow>\n <S.Separator />\n <S.SecondRow>\n <S.SecondRowText>\n And share the word!\n </S.SecondRowText>\n <S.TwitterIcon href=\"https://twitter.com/linuxnetdata/\" target=\"_blank\">\n <i className=\"fab fa-twitter\" />\n </S.TwitterIcon>\n <S.FacebookIcon href=\"https://www.facebook.com/linuxnetdata/\" target=\"_blank\">\n <i className=\"fab fa-facebook\" />\n </S.FacebookIcon>\n </S.SecondRow>\n </S.SocialMediaContainer>\n)\n","import React, { useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\ninterface Props {\n children: React.ReactNode\n}\nexport const SidebarSocialMediaPortal = ({\n children,\n}: Props) => {\n const element = useRef(document.querySelector(\"#sidebar-end-portal-container\"))\n return createPortal(children, element.current!)\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { ToastContainer, ToastContainerProps } from \"react-toastify\"\nimport \"react-toastify/dist/ReactToastify.min.css\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nimport { notificationsZIndex } from \"styles/z-index\"\n\nconst WrappedToastContainer = ({\n className,\n ...rest\n}: ToastContainerProps & { className?: string }) => (\n <div className={className}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <ToastContainer {...rest} closeButton={false} />\n </div>\n)\n\nexport const NotificationsContainer = styled(WrappedToastContainer)<ToastContainerProps>`\n .Toastify__toast-container {\n position: fixed;\n width: unset;\n min-width: 400px;\n max-width: 500px;\n ${notificationsZIndex};\n color: ${getColor([\"neutral\", \"limedSpruce\"])};\n }\n .Toastify__toast {\n padding: 0;\n padding-top: 5px;\n }\n .Toastify__toast--error {\n background: ${getColor([\"red\", \"lavender\"])};\n border: 1px solid ${getColor(\"error\")};\n }\n .Toastify__toast--warning {\n }\n .Toastify__toast--success {\n background: ${getColor([\"green\", \"frostee\"])};\n border: 1px solid ${getColor(\"success\")};\n }\n .Toastify__toast-body {\n }\n .Toastify__progress-bar {\n bottom: unset;\n top: 0;\n }\n .Toastify__progress-bar--success {\n background-color: ${getColor(\"success\")};\n }\n .Toastify__progress-bar--error {\n background-color: ${getColor(\"error\")};\n }\n`\n","import React from \"react\"\nimport { Icon, Flex } from \"@netdata/netdata-ui\"\n\nconst Item = ({ icon, children, hasBorder }) => (\n <Flex\n gap={2}\n border={hasBorder && { side: \"right\", color: \"separator\" }}\n alignItems=\"center\"\n padding={[0, 3, 0, 0]}\n height=\"100%\"\n >\n {!!icon && <Icon name={icon} color=\"bright\" height=\"15px\" />}\n {children}\n </Flex>\n)\n\nexport default Item\n","import React from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport Item from \"../item\"\nimport { useSelector } from \"@/src/store/redux-separate-context\"\n\nconst hostNameSelector = state => {\n const snapshot = state.global.snapshot\n const data = state.global.chartsMetadata.data\n\n if (!snapshot && !data) return \"\"\n return snapshot ? snapshot.hostname : data.hostname\n}\n\nconst Node = () => {\n const hostname = useSelector(hostNameSelector)\n\n return (\n <Item icon=\"node_hollow\">\n <Text color=\"bright\" strong truncate>\n {hostname}\n </Text>\n </Item>\n )\n}\n\nexport default Node\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst tooltipBackground = [\"neutral\", \"black\"]\n\nconst CustomTooltip = ({ children, isBasic }) => (\n <Flex\n padding={[1.5, 2]}\n margin={[2]}\n background={tooltipBackground}\n round={1}\n {...(!isBasic && { width: { max: \"300px\" } })}\n >\n <TextSmall color=\"bright\">{children}</TextSmall>\n </Flex>\n)\n\nexport default CustomTooltip\n","import React from \"react\"\nimport CustomTooltip from \"@/src/components/tooltips/customTooltip\"\n\nconst getContent = (content, { isBasic }) => {\n const contentNode = typeof content === \"function\" ? content() : content\n if (typeof content === \"string\" || isBasic) {\n return <CustomTooltip isBasic={isBasic}>{contentNode}</CustomTooltip>\n }\n return contentNode\n}\n\nexport default getContent\n","import React, { useCallback } from \"react\"\nimport { Tooltip as BaseTooltip } from \"@netdata/netdata-ui\"\nimport getContent from \"./getContent\"\n\nconst Tooltip = ({ children, content, isBasic, ...rest }) => {\n const getTooltipContent = useCallback(() => getContent(content, { isBasic }), [content, isBasic])\n return (\n <BaseTooltip plain animation content={getTooltipContent} {...rest}>\n {children}\n </BaseTooltip>\n )\n}\n\nexport default Tooltip\n","import React, { useCallback } from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport { setGlobalPauseAction } from \"domains/global/actions\"\nimport { useDispatch } from \"store/redux-separate-context\"\n\nconst Options = () => {\n const dispatch = useDispatch()\n const onClick = useCallback(() => dispatch(setGlobalPauseAction()), [dispatch])\n return (\n <Flex gap={2}>\n <Tooltip content=\"Import a Netdata snapshot\" align=\"bottom\" plain>\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#loadSnapshotModal\"\n icon=\"download\"\n />\n </Tooltip>\n <Tooltip content=\"Export a Netdata snapshot\" align=\"bottom\" plain>\n <Button\n onClick={onClick}\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#saveSnapshotModal\"\n icon=\"upload\"\n />\n </Tooltip>\n <Tooltip content=\"Print the dashboard\" align=\"bottom\" plain>\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#printPreflightModal\"\n icon=\"print\"\n />\n </Tooltip>\n </Flex>\n )\n}\n\nexport default Options\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Dropdown = styled(Flex).attrs({\n padding: [4],\n background: \"dropdown\",\n round: 1,\n overflow: { vertical: \"auto\" },\n margin: [4, 0, 0],\n width: 110,\n})`\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\n\nexport default Dropdown\n","import styled from \"styled-components\"\nimport React, { useRef } from \"react\"\nimport { useMedia, useToggle } from \"react-use\"\nimport { Drop, Flex, Icon, Pill, Text } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectLacksProtoBufSupport } from \"domains/global/selectors\"\n\nimport Dropdown from \"./dropdown\"\n\nconst PillContainer = styled(Flex)`\n white-space: nowrap;\n`\n\nconst Link = styled(Text).attrs({ as: \"a\", color: \"success\", target: \"_blank\" })``\n\nconst breakpoint = \"(min-width: 1400px)\"\n\nconst ProtoBuf = () => {\n const [isOpen, toggle] = useToggle()\n const lacksProtoBufSupport = useSelector(selectLacksProtoBufSupport)\n\n const ref = useRef()\n\n const isLargeEnough = useMedia(breakpoint)\n\n const close = () => {\n toggle(false)\n }\n if (!lacksProtoBufSupport) return null\n\n return (\n <Flex flex={false}>\n <PillContainer ref={ref}>\n <Pill onClick={toggle} flavour=\"warning\" icon=\"warning_triangle_hollow\">\n {isLargeEnough ? \"NOT MONITORED IN CLOUD\" : \"\"}\n </Pill>\n </PillContainer>\n {ref.current && isOpen && (\n <Drop\n target={ref.current}\n align={{ top: \"bottom\", left: \"left\" }}\n onEsc={close}\n onClickOutside={close}\n animation\n >\n <Dropdown>\n <Flex background=\"modalTabsBackground\" padding={[4]}>\n <Flex width={14} flex={false} alignItems=\"start\">\n <Flex padding={[2.5]} round=\"50%\" background=\"warningText\">\n <Icon color=\"warningBackground\" name=\"informationPress\" />\n </Flex>\n </Flex>\n <Flex>\n <Text>\n It will not be possible to monitor this node from Netdata Cloud after 1st of\n March. <br /> <br />\n This node does not have proto-buf support. In order to learn how to apply\n proto-buf support to your nodes{\" \"}\n <Link href=\"https://www.netdata.cloud/blog/netdata-clouds-new-architecture\">\n read our documentation.\n </Link>\n <br />\n <br /> If you are not interested in monitoring this node from Netdata Cloud, you\n can{\" \"}\n <Link href=\"https://learn.netdata.cloud/docs/agent/claim#remove-and-reconnect-a-node\">\n unclaim it.\n </Link>\n </Text>\n </Flex>\n </Flex>\n </Dropdown>\n </Drop>\n )}\n </Flex>\n )\n}\n\nexport default ProtoBuf\n","import React from \"react\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nimport { useHttp } from \"hooks/use-http\"\n\nconst NETDATA_LATEST_VERSION_URL = \"https://api.github.com/repos/netdata/netdata/releases/latest\"\nconst NETDATA_LATEST_GCS_VERSION_URL =\n \"https://www.googleapis.com/storage/v1/b/netdata-nightlies/o/latest-version.txt\"\n\nconst transformGcsVersionResponse = data => data.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\nconst transformGithubResponse = data => data?.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\nconst versionsMatch = (v1, v2) => {\n if (v1 === v2) {\n return true\n }\n let s1 = v1.split(\".\")\n let s2 = v2.split(\".\")\n // Check major version\n let n1 = parseInt(s1[0].substring(1, 2), 10)\n let n2 = parseInt(s2[0].substring(1, 2), 10)\n if (n1 < n2) return false\n if (n1 > n2) return true\n\n // Check minor version\n n1 = parseInt(s1[1], 10)\n n2 = parseInt(s2[1], 10)\n if (n1 < n2) return false\n if (n1 > n2) return true\n\n // Split patch: format could be e.g. 0-22-nightly\n s1 = s1[2].split(\"-\")\n s2 = s2[2].split(\"-\")\n\n n1 = parseInt(s1[0], 10)\n n2 = parseInt(s2[0], 10)\n if (n1 < n2) return false\n if (n1 > n2) return true\n\n n1 = s1.length > 1 ? parseInt(s1[1], 10) : 0\n n2 = s2.length > 1 ? parseInt(s2[1], 10) : 0\n if (n1 < n2) return false\n return true\n}\n\nconst VersionControl = ({ currentVersion, releaseChannel }) => {\n const isStableReleaseChannel = releaseChannel === \"stable\"\n const [githubVersion] = useHttp(NETDATA_LATEST_VERSION_URL, isStableReleaseChannel, true)\n\n const [gcsVersionResponse] = useHttp(NETDATA_LATEST_GCS_VERSION_URL, !isStableReleaseChannel)\n const [mediaLinkResponse] = useHttp(gcsVersionResponse?.mediaLink, Boolean(gcsVersionResponse))\n\n const latestVersion = isStableReleaseChannel\n ? transformGithubResponse(githubVersion)\n : mediaLinkResponse\n ? transformGcsVersionResponse(mediaLinkResponse)\n : null\n\n if (!latestVersion) {\n return null\n }\n const isNewVersionAvailable = !versionsMatch(currentVersion, latestVersion)\n\n return (\n <Tooltip content={isNewVersionAvailable ? \"Need help?\" : \"Check Version\"} align=\"bottom\" plain>\n <Button\n flavour=\"borderless\"\n themeType=\"dark\"\n small\n neutral={!isNewVersionAvailable}\n warning={isNewVersionAvailable}\n name={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n icon={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n data-toggle=\"modal\"\n data-target=\"#updateModal\"\n />\n </Tooltip>\n )\n}\n\nexport default VersionControl\n","import React from \"react\"\nimport VersionControl from \"components/app-header/components/versionControl\"\nimport { useSelector } from \"@/src/store/redux-separate-context\"\n\nconst versionSelector = state => {\n const { data } = state.global.chartsMetadata\n\n if (!data) return null\n\n const { version, release_channel: releaseChannel } = data\n return {\n version,\n releaseChannel,\n }\n}\n\nconst Version = () => {\n const data = useSelector(versionSelector)\n return (\n data && <VersionControl currentVersion={data.version} releaseChannel={data.releaseChannel} />\n )\n}\n\nexport default Version\n","import { useState, useCallback } from \"react\"\n\n/**\n * @example\n * const [value, toggle, toggleOn, toggleOff] = useToggle(false);\n *\n * @param {Boolean} initialValue\n */\n\nconst useToggle = (initialValue = false) => {\n const [value, setToggle] = useState(!!initialValue)\n const toggle = useCallback(() => setToggle(oldValue => !oldValue), [])\n const toggleOn = useCallback(() => setToggle(true), [])\n const toggleOff = useCallback(() => setToggle(false), [])\n\n return [value, toggle, toggleOn, toggleOff]\n}\n\nexport default useToggle\n","import { useEffect, useState } from \"react\"\n\nconst useLocalStorage = (key, defaultValue) => {\n const [value, setValue] = useState(() => getValueFromStorage(key, defaultValue))\n\n useEffect(() => localStorage.setItem(key, JSON.stringify(value)), [key, value])\n\n return [value, setValue]\n}\n\nconst getValueFromStorage = (key, defaultValue = \"\") =>\n JSON.parse(localStorage.getItem(key)) ?? defaultValue\n\nexport default useLocalStorage\n","import styled from \"styled-components\"\nimport { getColor, getSizeBy, Icon } from \"@netdata/netdata-ui\"\nimport { Menu } from \"@rmwc/menu\"\n\nexport const RootContainer = styled.div`\n width: 100%;\n height: 100%;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n`\n\nexport const StyledMenu = styled(Menu)``\n\nexport const DropdownContainer = styled.div`\n cursor: pointer;\n color: ${getColor(\"bright\")};\n .mdc-menu-surface {\n border-radius: 0;\n .mdc-list {\n padding: 0;\n }\n .mdc-list-item {\n padding: 0 ${getSizeBy(5)} 0 ${getSizeBy(5)};\n font-size: 14px;\n height: ${getSizeBy(6)};\n }\n }\n`\n\nexport const ListContainer = styled.div`\n padding: ${getSizeBy(3)} 0;\n`\n\nexport const OpenerIcon = styled(Icon)`\n flex-shrink: 0;\n flex-grow: 0;\n margin-left: ${({ noMargin }) => (noMargin ? \"unset\" : \"16px\")};\n fill: ${getColor(\"bright\")};\n width: 10px;\n height: 5px;\n`\n","import styled from \"styled-components\"\nimport { getColor, getSizeBy, Icon, Drop } from \"@netdata/netdata-ui\"\nimport { Dropdown } from \"@/src/components/mdx-components/dropdown\"\nimport { dialogsZIndex, customDropdownZIndex } from \"@/src/styles/z-index\"\n\nexport const PickerBox = styled.div`\n display: flex;\n position: relative;\n min-width: ${getSizeBy(102)};\n min-height: ${getSizeBy(43)};\n flex-direction: column;\n align-items: flex-end;\n background-color: ${getColor(\"mainBackground\")};\n color: ${getColor(\"text\")};\n z-index: ${dialogsZIndex};\n border-radius: 8px;\n`\n\nexport const StyledTimePeriod = styled.span`\n margin-top: ${getSizeBy(3)};\n cursor: pointer;\n width: 187px;\n height: ${getSizeBy(2)};\n &:first-of-type {\n margin-top: ${getSizeBy(1)};\n }\n &:last-of-type {\n margin-bottom: ${getSizeBy(1)};\n }\n & > span:hover {\n color: ${getColor(\"textLite\")};\n }\n`\nexport const StyledCustomTimePeriod = styled.span`\n margin: ${getSizeBy(1)} ${getSizeBy(3)} 0;\n color: ${({ isSelected, theme }) => getColor(isSelected ? \"primary\" : \"text\")({ theme })};\n cursor: pointer;\n &:first-of-type {\n margin-top: 0;\n }\n &:hover {\n color: ${getColor(\"textLite\")};\n }\n`\n\nexport const StyledDropdown = styled(Dropdown)`\n width: 88px;\n height: 32px;\n padding-top: 8px;\n padding-bottom: 8px;\n padding-left: 8px;\n padding-right: 7px;\n border: 1px solid ${getColor(\"border\")};\n box-sizing: border-box;\n border-radius: 4px;\n display: flex;\n justify-content: center;\n align-items: center;\n color: ${getColor(\"text\")};\n .mdc-menu-surface--anchor {\n .mdc-menu-surface--open {\n ${customDropdownZIndex}\n margin-top: ${getSizeBy(2)};\n background: ${getColor(\"mainBackground\")};\n border-radius: 4px;\n }\n }\n .mdc-list {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n`\nexport const DropdownIcon = styled(Icon)`\n fill: ${getColor(\"text\")};\n width: 12px;\n height: 12px;\n`\n\nexport const CustomInput = styled.input`\n border: 1px solid ${getColor(\"border\")};\n color: inherit;\n background: ${getColor(\"mainBackground\")};\n box-sizing: border-box;\n border-radius: 4px;\n padding: 4px;\n width: 32px;\n height: 32px;\n margin-left: 10px;\n margin-right: 10px;\n outline: none;\n &:focus {\n border: 1px solid ${getColor(\"primary\")};\n }\n`\nexport const StyledDrop = styled(Drop).attrs({\n background: \"mainBackground\",\n round: 2,\n margin: [4, 0, 0],\n border: { side: \"all\", color: \"elementBackground\" },\n animation: true,\n})`\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\nexport const StyledHR = styled.hr`\n border: none;\n margin: 0;\n border-left: 1px solid ${getColor(\"borderSecondary\")};\n height: 284px;\n`\n","import React, { useRef } from \"react\"\nimport { List } from \"@rmwc/list\"\nimport { MenuSurfaceAnchor, MenuSurface } from \"@rmwc/menu\"\nimport { RootContainer, ListContainer, DropdownContainer, OpenerIcon } from \"./styled\"\n\nexport const Dropdown = ({\n title,\n children,\n className,\n renderTitle,\n isOpen = false,\n onMenuToggle,\n anchorCorner = \"bottomStart\",\n renderOpener,\n}) => {\n const ref = useRef()\n\n const handleOpenState = () => {\n onMenuToggle(!isOpen)\n }\n\n const handleClose = () => {\n onMenuToggle(false)\n }\n\n return (\n <DropdownContainer className={className}>\n <MenuSurfaceAnchor>\n <MenuSurface ref={ref} open={isOpen} onClose={handleClose} anchorCorner={anchorCorner}>\n {typeof children === \"function\" ? (\n isOpen && (\n <ListContainer>\n <List>{children({ maxHeight: ref.current?.root.ref.style.maxHeight })}</List>\n </ListContainer>\n )\n ) : (\n <ListContainer>\n <List>{children}</List>\n </ListContainer>\n )}\n </MenuSurface>\n <RootContainer onClick={handleOpenState}>\n {title || (renderTitle && renderTitle())}\n {renderOpener ? (\n renderOpener()\n ) : (\n <OpenerIcon name=\"triangle_down\" noMargin={Boolean(renderTitle)} />\n )}\n </RootContainer>\n </MenuSurfaceAnchor>\n </DropdownContainer>\n )\n}\n","import React, { memo, useCallback } from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { StyledTimePeriod } from \"./styled\"\n\nconst TimePeriod = ({ value, period, resolution, isSelected, setTimeRange, tagging }) => {\n const onClick = useCallback(\n () => setTimeRange(value, resolution),\n [value, resolution, setTimeRange]\n )\n return (\n <StyledTimePeriod\n key={value}\n onClick={onClick}\n data-ga={`date-picker::click-quick-selector::${tagging}::${-value}`}\n data-testid=\"timePeriod-value\"\n >\n <Text color={isSelected ? \"primary\" : \"text\"}>{period}</Text>\n </StyledTimePeriod>\n )\n}\n\nexport default memo(TimePeriod)\n","import { format, formatDistanceStrict, parse, getTime, getUnixTime, add, isMatch } from \"date-fns\"\n\nconst MINUTE = 60\nconst HOUR = MINUTE * 60\nconst DAY = HOUR * 24\nconst MONTH = 30 * DAY\n\nexport const maxTimePeriodInUnix = 94694400\nexport const dateResolutions = [\"minutes\", \"hours\", \"days\", \"months\"]\n\nconst resolutionsMapping = {\n minutes: MINUTE,\n hours: HOUR,\n days: DAY,\n months: MONTH,\n}\n\nexport const getCustomTimePeriod = (after, resolution) =>\n Math.round(after / resolutionsMapping[resolution])\n\nexport const parseInputPeriod = (timeCorrection, resolution) => {\n const customRange = add(new Date(0), {\n [resolution]: timeCorrection,\n })\n return -getUnixTime(customRange)\n}\n\nconst focusTaggingMap = {\n startDate: \"start\",\n endDate: \"finish\",\n}\n\nexport const getFocusTagging = focusedInput => focusTaggingMap[focusedInput]\n\nexport const timePeriods = [\n { period: \"Last 5 minutes\", value: -5 * MINUTE, resolution: \"minutes\" },\n { period: \"Last 15 minutes\", value: -15 * MINUTE, resolution: \"minutes\" },\n { period: \"Last 30 minutes\", value: -30 * MINUTE, resolution: \"minutes\" },\n { period: \"Last 2 hours\", value: -2 * HOUR, resolution: \"hours\" },\n { period: \"Last 6 hours\", value: -6 * HOUR, resolution: \"hours\" },\n { period: \"Last 12 hours\", value: -12 * HOUR, resolution: \"hours\" },\n { period: \"Last Day\", value: -DAY, resolution: \"days\" },\n { period: \"Last 2 Days\", value: -2 * DAY, resolution: \"days\" },\n { period: \"Last 7 Days\", value: -7 * DAY, resolution: \"days\" },\n]\n\nexport const formatDates = (startDate, endDate) => {\n const formattedStartDate = format(startDate, \"MMMM d yyyy, H:mm:ss\")\n const formattedEndDate = format(endDate, \"MMMM d yyyy, H:mm:ss\")\n return {\n formattedStartDate,\n formattedEndDate,\n }\n}\n\nexport const formatOffset = offset => {\n if (!offset) return \"+00:00\"\n const splitOffset = offset.toString().split(\".\")\n const mathSign = splitOffset[0] > 0 ? \"+\" : \"-\"\n const absoluteNumber = Math.abs(splitOffset[0]).toString()\n const firstPart = `${mathSign}${absoluteNumber.padStart(2, 0)}`\n return splitOffset.length > 1\n ? `${firstPart}:${String(splitOffset[1] * 0.6).padEnd(2, 0)}`\n : `${firstPart}:00`\n}\n\nexport const getDateWithOffset = (date, utcOffset) => {\n const formattedDate = isMatch(date, \"MMMM d yyyy, H:mm\")\n ? date\n : parse(date, \"MMMM d yyyy, H:mm\", Date.now())\n return parse(`${formattedDate} ${formatOffset(utcOffset)}`, \"MMMM d yyyy, H:mm xxx\", Date.now())\n}\n\nexport const getTimePeriod = (startDate, endDate) =>\n formatDistanceStrict(getTime(startDate), getTime(endDate))\n","import React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport TimePeriod from \"./timePeriod\"\nimport { timePeriods } from \"./utils\"\n\nconst TimePeriods = ({ handleTimePeriodChange, selectedDate, tagging }) => (\n <Flex\n column\n justifyContent=\"start\"\n alignItems=\"start\"\n height={{ max: \"240px\" }}\n overflow={{ vertical: \"scroll\" }}\n data-testid=\"timePeriods\"\n >\n {timePeriods.map(({ period, value, resolution }) => (\n <TimePeriod\n key={value}\n value={value}\n period={period}\n resolution={resolution}\n setTimeRange={handleTimePeriodChange}\n isSelected={selectedDate === value}\n tagging={tagging}\n />\n ))}\n </Flex>\n)\n\nexport default TimePeriods\n","import React, { useCallback, useEffect, useState } from \"react\"\nimport { isValid, add, getUnixTime } from \"date-fns\"\nimport { Flex, Text } from \"@netdata/netdata-ui\"\nimport {\n getCustomTimePeriod,\n parseInputPeriod,\n dateResolutions,\n maxTimePeriodInUnix,\n} from \"./utils\"\nimport { StyledDropdown, DropdownIcon, CustomInput, StyledCustomTimePeriod } from \"./styled\"\n\nconst CustomTimePeriod = ({ handleTimePeriodChange, value, resolution, tagging }) => {\n const getInputValue = () => (value <= 0 ? getCustomTimePeriod(-value, resolution) : 0)\n const [inputValue, setInputValue] = useState(getInputValue)\n const [isDropdownOpen, toggleDropdown] = useState(false)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => setInputValue(getInputValue()), [value])\n\n const onChange = useCallback(e => setInputValue(e.target.value), [])\n\n const onBlur = useCallback(\n e => {\n const currentValue = Number(e.currentTarget.value)\n const isValidInput =\n !Number.isNaN(currentValue) && Number.isInteger(currentValue) && currentValue > 0\n const timePeriod = add(new Date(0), {\n [resolution]: currentValue,\n })\n const isValidTimePeriod =\n isValidInput && isValid(timePeriod) && getUnixTime(timePeriod) <= maxTimePeriodInUnix\n if (isValidTimePeriod)\n return handleTimePeriodChange(parseInputPeriod(currentValue, resolution), resolution)\n return value <= 0 ? setInputValue(getCustomTimePeriod(-value, resolution)) : setInputValue(0)\n },\n [resolution, value, handleTimePeriodChange]\n )\n\n const onChangeResolution = useCallback(\n newResolution => {\n return () => {\n handleTimePeriodChange(parseInputPeriod(inputValue, newResolution), newResolution)\n toggleDropdown(false)\n }\n },\n [inputValue, handleTimePeriodChange]\n )\n\n const renderTitle = () => (\n <Flex alignItems=\"center\" flexWrap={false} width=\"100%\">\n <Text padding={[0, 4, 0, 0]}>{resolution}</Text>\n <DropdownIcon name=\"triangle_down\" />\n </Flex>\n )\n return (\n <Flex\n justifyContent=\"start\"\n alignItems=\"center\"\n height={8}\n data-ga={`date-picker::click-last-integer::${tagging}`}\n data-testid=\"customTimePeriod\"\n >\n <Text>Last</Text>\n <CustomInput\n value={inputValue}\n onChange={onChange}\n onBlur={onBlur}\n data-ga={`date-picker::click-last-integer::${tagging}::${inputValue}`}\n data-testid=\"timePeriod-timeInput\"\n />\n <StyledDropdown\n isOpen={isDropdownOpen}\n onMenuToggle={toggleDropdown}\n renderTitle={renderTitle}\n renderOpener={() => null}\n >\n {() =>\n dateResolutions.map(dateResolution => (\n <StyledCustomTimePeriod\n key={dateResolution}\n onClick={onChangeResolution(dateResolution)}\n data-ga={`date-picker::click-last-time-${dateResolution}::${tagging}`}\n data-testid=\"timePeriod-option\"\n >\n {dateResolution}\n </StyledCustomTimePeriod>\n ))\n }\n </StyledDropdown>\n </Flex>\n )\n}\n\nexport default CustomTimePeriod\n","import React from \"react\"\nimport DatePickerLib from \"react-datepicker\"\nimport \"react-datepicker/dist/react-datepicker.css\"\n\nconst DatePicker = ({\n selected,\n selectsStart = false,\n selectsEnd = false,\n startDate,\n endDate,\n onChange,\n minDate,\n maxDate,\n dateFormat = \"MM/dd/yyyy\",\n open = false,\n startOpen = false,\n inline = false,\n selectsRange = false,\n monthsShown = 1,\n showPopperArrow = true,\n calendarContainer = null,\n}) => (\n <DatePickerLib\n selected={selected}\n onChange={onChange}\n selectsStart={selectsStart}\n selectsEnd={selectsEnd}\n startDate={startDate}\n endDate={endDate}\n minDate={minDate}\n maxDate={maxDate}\n dateFormat={dateFormat}\n open={open}\n startOpen={startOpen}\n inline={inline}\n selectsRange={selectsRange}\n monthsShown={monthsShown}\n showPopperArrow={showPopperArrow}\n calendarContainer={calendarContainer}\n />\n)\n\nexport default DatePicker\n","import { getColor, getRgbColor } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\n\nexport const StyledDateInput = styled.input`\n width: 100%;\n text-align: center;\n border: 1px solid ${getColor(\"border\")};\n color: inherit;\n background: ${getColor(\"mainBackground\")};\n box-sizing: border-box;\n border-radius: 4px;\n padding: 4px;\n height: 32px;\n margin-left: 20px;\n margin-right: 20px;\n outline: none;\n &:focus {\n border: 1px solid ${getColor(\"primary\")};\n }\n`\nexport const StyledCalendar = styled.div`\n background: ${getColor(\"mainBackground\")};\n border: 0;\n .react-datepicker {\n &__navigation {\n top: 8px;\n &-icon::before {\n border-color: ${getColor(\"text\")};\n }\n }\n &__header {\n background: ${getColor(\"mainBackground\")};\n border: 0;\n .react-datepicker__current-month {\n color: ${getColor(\"main\")};\n font-weight: normal;\n }\n .react-datepicker__day-name {\n color: ${getColor(\"textLite\")};\n }\n }\n &__day {\n color: ${getColor(\"main\")};\n &:hover {\n background: ${getColor(\"elementBackground\")};\n }\n &--disabled {\n color: ${getColor(\"textLite\")};\n &:hover {\n background: inherit;\n }\n }\n &--keyboard-selected,\n &--keyboard-selected:hover {\n color: ${getColor(\"main\")};\n background: inherit;\n border-radius: inherit;\n }\n &--selected,\n &--selected:hover {\n color: ${getColor(\"bright\")};\n background: ${getColor(\"primary\")};\n border-radius: 8px;\n }\n &--in-selecting-range,\n &--in-range {\n color: ${getColor(\"primary\")};\n background: ${getColor(\"elementBackground\")};\n border-radius: 0;\n }\n &--selecting-range-start,\n &--range-start {\n color: ${getColor(\"bright\")};\n background: ${getColor(\"primary\")};\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n &:hover {\n color: ${getColor(\"bright\")};\n background: ${getRgbColor([\"green\", \"netdata\"], 0.8)};\n border-radius: 0;\n border-top-left-radius: 8px;\n border-bottom-left-radius: 8px;\n }\n }\n &--selecting-range-end,\n &--range-end {\n color: ${getColor(\"bright\")};\n background: ${getColor(\"primary\")};\n border-top-right-radius: 8px;\n border-bottom-right-radius: 8px;\n &:hover {\n color: ${getColor(\"bright\")};\n background: ${getRgbColor([\"green\", \"netdata\"], 0.8)};\n border-top-right-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n }\n }\n }\n`\n","import React, { useState, useEffect, useCallback } from \"react\"\nimport { format, isValid, getTime } from \"date-fns\"\nimport { getDateWithOffset } from \"./utils\"\nimport { StyledDateInput } from \"../datePicker/styled\"\nimport { useDateTime } from \"@/src/utils/date-time\"\n\nconst DatePickerInput = ({\n name = \"\",\n value = \"\",\n onDatesChange,\n onFocus,\n placeholderText = \"\",\n}) => {\n const { utcOffset } = useDateTime()\n const [inputValue, setInputValue] = useState(\"\")\n const onChange = useCallback(e => {\n const date = e.target.value\n setInputValue(date)\n }, [])\n const setFormattedValue = useCallback(value => {\n if (isValid(value)) {\n const formattedDate = format(value, \"MMMM d yyyy, H:mm\")\n setInputValue(formattedDate)\n }\n }, [])\n const onBlur = useCallback(\n e => {\n const parsedDate = getDateWithOffset(e.target.value, utcOffset)\n const isValidDate = isValid(parsedDate) && getTime(parsedDate) > 0\n if (isValidDate) {\n const timestamp = getTime(parsedDate)\n onDatesChange(timestamp, () => setFormattedValue(value))\n } else setFormattedValue(value)\n },\n [value, utcOffset, onDatesChange, setFormattedValue]\n )\n\n useEffect(() => setFormattedValue(value), [value, setFormattedValue])\n\n return (\n <StyledDateInput\n type=\"text\"\n name={name}\n value={value ? inputValue : placeholderText}\n onChange={onChange}\n onBlur={onBlur}\n onFocus={onFocus}\n placeholder={placeholderText}\n data-testid=\"datePicker-input\"\n />\n )\n}\n\nexport default DatePickerInput\n","import { useDateTime } from \"@/src/utils/date-time\"\nimport { useCallback } from \"react\"\n\nconst useLocaleDate = () => {\n const { localeTimeString, localeDateString } = useDateTime()\n return useCallback(\n date => {\n return `${localeDateString(date, { locale: \"en-us\", long: false })} ${localeTimeString(date, {\n secs: false,\n })}`\n },\n [localeTimeString, localeDateString]\n )\n}\n\nexport default useLocaleDate\n","import { useMemo } from \"react\"\nimport { toDate } from \"date-fns\"\nimport useLocaleDate from \"./useLocaleDate\"\n\nexport const convertTimestampToDate = (timestamp, getLocaleDate) => {\n if (timestamp > 0) {\n return toDate(new Date(getLocaleDate(timestamp)))\n } else if (timestamp || timestamp === 0)\n return toDate(new Date(getLocaleDate(new Date().valueOf() + timestamp * 1000)))\n return null\n}\n\nconst useConvertedDates = (startDate, endDate) => {\n const getLocaleDate = useLocaleDate()\n return useMemo(\n () => [\n convertTimestampToDate(startDate, getLocaleDate),\n convertTimestampToDate(endDate, getLocaleDate),\n ],\n [startDate, endDate, getLocaleDate]\n )\n}\n\nexport default useConvertedDates\n","import { Flex } from \"@netdata/netdata-ui\"\nimport React, { useCallback } from \"react\"\nimport { getTime, isBefore, format } from \"date-fns\"\nimport { useDateTime } from \"@/src/utils/date-time\"\nimport DatePicker from \"../datePicker/datePickerLib\"\nimport DatePickerInput from \"./datePickerInput\"\nimport useConvertedDates, { convertTimestampToDate } from \"./useConvertedDate\"\nimport useLocaleDate from \"./useLocaleDate\"\nimport { getDateWithOffset } from \"./utils\"\nimport { StyledCalendar } from \"../datePicker/styled\"\n\nconst DatePickerWrapper = ({\n startDate,\n setStartDate,\n endDate,\n setEndDate,\n onDatesChange,\n onInputFocus,\n}) => {\n const getLocaleDate = useLocaleDate()\n const [convertedStartDate, convertedEndDate] = useConvertedDates(startDate, endDate)\n const { utcOffset } = useDateTime()\n const setValidStartDate = useCallback(\n (startDate, setPreviousValue) =>\n isBefore(convertTimestampToDate(startDate, getLocaleDate), convertedEndDate)\n ? setStartDate(startDate)\n : setPreviousValue(),\n [convertedEndDate, getLocaleDate, setStartDate]\n )\n\n const setValidEndDate = useCallback(\n (endDate, setPreviousValue) =>\n isBefore(convertedStartDate, convertTimestampToDate(endDate, getLocaleDate))\n ? setEndDate(endDate)\n : setPreviousValue(),\n [convertedStartDate, getLocaleDate, setEndDate]\n )\n\n const onChange = useCallback(\n dates => {\n const [startDate, endDate] = dates\n\n const startDateWithOffset = startDate\n ? getDateWithOffset(format(startDate, \"MMMM d yyyy, H:mm\"), utcOffset)\n : startDate\n const endDateWithOffset = endDate\n ? getDateWithOffset(format(endDate, \"MMMM d yyyy, H:mm\"), utcOffset)\n : endDate\n\n const startDateTimestamp = getTime(startDateWithOffset) || null\n const endDateTimestamp = getTime(endDateWithOffset) || null\n\n onDatesChange(startDateTimestamp, endDateTimestamp)\n },\n [utcOffset, onDatesChange]\n )\n\n return (\n <Flex\n column\n justifyContent=\"center\"\n alignItems=\"center\"\n flex={{ grow: 1 }}\n gap={3}\n margin={[0, 0, 0, 7]}\n data-testid=\"datePicker-wrapper\"\n >\n <DatePicker\n selected={convertedStartDate}\n onChange={onChange}\n startDate={convertedStartDate}\n endDate={convertedEndDate}\n maxDate={new Date()}\n minDate={new Date(\"1/1/2018\")}\n inline\n selectsRange\n monthsShown={2}\n dateFormat=\"MMMM d yyyy, H:mm\"\n showPopperArrow={false}\n calendarContainer={StyledCalendar}\n />\n <Flex justifyContent=\"around\" alignItems=\"center\" width=\"100%\">\n <DatePickerInput\n name=\"startDate\"\n value={convertedStartDate}\n onDatesChange={setValidStartDate}\n onFocus={onInputFocus}\n placeholderText=\"Select a start date\"\n />\n <DatePickerInput\n name=\"endDate\"\n value={convertedEndDate}\n onDatesChange={setValidEndDate}\n onFocus={onInputFocus}\n placeholderText=\"Select an end date\"\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default DatePickerWrapper\n","import React, { useMemo } from \"react\"\nimport { Flex, Icon, TextSmall } from \"@netdata/netdata-ui\"\nimport { formatDates, getTimePeriod } from \"./utils\"\nimport useConvertedDates from \"./useConvertedDate\"\n\nconst PeriodIndication = ({ startDate, endDate }) => {\n const [convertedStart, convertedEnd] = useConvertedDates(startDate, endDate)\n\n const { formattedStartDate, formattedEndDate } = useMemo(\n () => formatDates(convertedStart, convertedEnd),\n [convertedStart, convertedEnd]\n )\n const timePeriod = useMemo(\n () => getTimePeriod(convertedStart, convertedEnd),\n [convertedStart, convertedEnd]\n )\n\n return (\n <Flex alignItems=\"center\" justifyContent=\"between\" gap={2}>\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={1.5}>\n <TextSmall strong whiteSpace=\"nowrap\">\n From\n </TextSmall>\n <TextSmall whiteSpace=\"nowrap\" data-testid=\"periodIndication-from\">\n {formattedStartDate}\n </TextSmall>\n </Flex>\n <Icon name=\"arrow_left\" size=\"small\" color=\"textLite\" rotate={2} />\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={1.5}>\n <TextSmall strong whiteSpace=\"nowrap\">\n To\n </TextSmall>\n <TextSmall whiteSpace=\"nowrap\" data-testid=\"periodIndication-to\">\n {formattedEndDate}\n </TextSmall>\n </Flex>\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={2}>\n <TextSmall whiteSpace=\"nowrap\">/</TextSmall>\n <TextSmall color=\"textLite\" whiteSpace=\"nowrap\" data-testid=\"periodIndication-period\">\n {timePeriod}\n </TextSmall>\n </Flex>\n </Flex>\n )\n}\n\nexport default PeriodIndication\n","import moment from \"moment\"\n\nexport const SECONDS = 1000\nexport const MINUTE = SECONDS * 60\nexport const HOUR = MINUTE * 60\nexport const DAY = HOUR * 24\nexport const MONTH = DAY * 30\n\nconst resolutionMap = [\n { value: DAY, unit: \"d\" },\n { value: HOUR, unit: \"h\" },\n { value: MINUTE, unit: \"min\" },\n { value: MINUTE, unit: \"min\" },\n { value: SECONDS, unit: \"s\" },\n]\n\nexport const getStartDate = start =>\n start < 0 ? moment(new Date()).add(start, \"seconds\") : moment(start)\nexport const getEndDate = end => (!end ? moment(new Date()) : moment(end))\nexport const getIsSameDate = (startDate, endDate) => startDate.isSame(endDate, \"day\")\nexport const getDuration = (startDate, endDate) => moment.duration(startDate.diff(endDate))\n\nconst getResolution = (value, resolution) => (value > 1 ? `${Math.floor(value)}${resolution}` : \"\")\n\nexport const getGranularDuration = duration => {\n let seconds = Math.abs(duration)\n const showSeconds = seconds < MINUTE\n return resolutionMap.reduce((acc, { value, unit }) => {\n if (value === SECONDS && !showSeconds) return acc\n acc = acc + getResolution(seconds / value, unit)\n seconds = seconds % value\n return acc\n }, \"\")\n}","import styled from \"styled-components\"\nimport { Flex, getColor } from \"@netdata/netdata-ui\"\n\nconst Container = styled(Flex)`\n cursor: pointer;\n\n &:hover * {\n color: ${getColor(\"textLite\")};\n fill: ${getColor(\"textLite\")};\n }\n`\n\nexport default Container\n","import React from \"react\"\nimport { Flex, TextSmall, Icon } from \"@netdata/netdata-ui\"\nimport { useDateTime } from \"utils/date-time\"\n\nconst DateBox = ({ isPlaying, startDate, endDate, isSameDate }) => {\n const { localeTimeString, localeDateString } = useDateTime()\n return (\n <Flex gap={2}>\n <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n {localeDateString(startDate, { long: false })} •{\" \"}\n <TextSmall color={isPlaying ? \"accent\" : \"textFocus\"} whiteSpace=\"nowrap\">\n {localeTimeString(startDate, { secs: false })}\n </TextSmall>\n </TextSmall>\n <Icon name=\"arrow_left\" color={isPlaying ? \"accent\" : \"textFocus\"} size=\"small\" rotate={2} />\n <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n {!isSameDate && `${localeDateString(endDate, { long: false })} • `}\n <TextSmall color={isPlaying ? \"accent\" : \"textFocus\"} whiteSpace=\"nowrap\">\n {localeTimeString(endDate, { secs: false })}\n </TextSmall>\n </TextSmall>\n </Flex>\n )\n}\n\nexport default DateBox\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst DurationBox = ({ isPlaying, duration }) => {\n return (\n <Flex gap={1}>\n <Flex width=\"24px\" justifyContent=\"center\">\n {isPlaying && (\n <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n • last\n </TextSmall>\n )}\n </Flex>\n <TextSmall color=\"text\" whiteSpace=\"nowrap\">\n {duration}\n </TextSmall>\n </Flex>\n )\n}\n\nexport default DurationBox\n","import React, { useState, useMemo, useEffect, forwardRef } from \"react\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport { useSelector as useDashboardSelector } from \"store/redux-separate-context\"\nimport { selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport {\n getStartDate,\n getEndDate,\n getIsSameDate,\n getDuration,\n MINUTE,\n getGranularDuration,\n} from \"./utils\"\nimport Container from \"./container\"\nimport DateBox from \"./dateBox\"\nimport DurationBox from \"./durationBox\"\n\nconst PickerAccessorElement = forwardRef(\n (\n { onClick, start = 15 * MINUTE, end, isPlaying, isPickerOpen, setRangeValues, tagging },\n ref\n ) => {\n const [timeframe, setTimeframe] = useState()\n const startDate = getStartDate(start)\n const endDate = getEndDate(end)\n const globalPanAndZoom = useDashboardSelector(selectGlobalPanAndZoom)\n useEffect(() => {\n const after = getDuration(startDate, endDate).as(\"seconds\")\n if (!isPlaying && timeframe !== after) setTimeframe(Math.round(after))\n if (isPlaying && timeframe && !!globalPanAndZoom) {\n setRangeValues({ start: Math.round(timeframe) })\n setTimeframe(null)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [startDate, endDate, timeframe, isPlaying])\n\n const isSameDate = useMemo(() => getIsSameDate(startDate, endDate), [startDate, endDate])\n const duration = useMemo(\n () => getGranularDuration(getDuration(startDate, endDate).as(\"milliseconds\")),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [isPlaying, startDate, endDate]\n )\n\n return (\n <Tooltip\n content={isPickerOpen ? () => {} : \"Select a predefined or a custom timeframe\"}\n align=\"bottom\"\n plain\n >\n <Container\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={1}\n height=\"100%\"\n width={{ min: \"380px\" }}\n onMouseDown={onClick}\n padding={[0, 1]}\n ref={ref}\n data-ga={`date-picker::click-time::${tagging}`}\n data-testid=\"datePicker-accessorElement\"\n >\n <DateBox\n isPlaying={isPlaying}\n endDate={endDate}\n startDate={startDate}\n isSameDate={isSameDate}\n />\n <DurationBox isPlaying={isPlaying} duration={duration} />\n </Container>\n </Tooltip>\n )\n }\n)\n\nexport default PickerAccessorElement\n","import React, { useState, useEffect, useMemo, useRef, useCallback } from \"react\"\nimport { Button, Flex } from \"@netdata/netdata-ui\"\nimport useToggle from \"hooks/useToggle\"\nimport useLocalStorage from \"hooks/useLocalStorage\"\nimport TimePeriods from \"./timePeriods\"\nimport CustomTimePeriod from \"./customTimePeriod\"\nimport DatePickerWrapper from \"./datePickerWrapper\"\nimport { getFocusTagging } from \"./utils\"\nimport PeriodIndication from \"./periodIndication\"\nimport AccessorElement from \"./accessorElement\"\nimport { PickerBox, StyledDrop, StyledHR } from \"./styled\"\n\nexport const reportEvent = (\n eventCategory,\n eventAction,\n eventLabel,\n eventValue,\n event = \"gaCustomEvent\"\n) => {\n if (window.dataLayer) {\n const eventData = { event, eventCategory, eventAction, eventLabel, eventValue }\n window.dataLayer.push(eventData)\n }\n}\n\nconst DatePickerDrop = ({\n onChange,\n values: { start: initialStartDate, end: initialEndDate } = {},\n defaultValue = -60 * 15,\n tagging = \"\",\n isPlaying,\n}) => {\n const [startDate, setStartDate] = useState(initialStartDate)\n const [endDate, setEndDate] = useState(initialStartDate)\n const [resolution, setResolution] = useLocalStorage(\"resolution\", \"minutes\")\n const [focusedInput, setFocusedInput] = useState(\"startDate\")\n const [isOpen, toggle, , close] = useToggle()\n const ref = useRef()\n\n const setDates = useCallback(({ startDate, endDate }) => {\n setStartDate(startDate)\n setEndDate(endDate)\n }, [])\n\n useEffect(() => {\n setDates({\n startDate: initialStartDate,\n endDate: initialEndDate,\n })\n }, [initialStartDate, initialEndDate, setDates])\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const clearChanges = useCallback(() => setDates({ startDate: defaultValue, endDate: 0 }), [])\n\n const onInputFocus = useCallback(e => {\n if (!e.target.name) return\n setFocusedInput(e.target.name)\n }, [])\n\n const togglePicker = useCallback(\n e => {\n e.stopPropagation()\n toggle()\n },\n [toggle]\n )\n\n const applyChanges = () => {\n onChange({\n start: startDate,\n end: endDate,\n })\n close()\n }\n\n const focusTagging = useMemo(() => getFocusTagging(focusedInput), [focusedInput])\n\n const isValidTimePeriod = startDate !== null && endDate !== null && startDate !== endDate\n const isApplyDisabled = startDate === initialStartDate && endDate === initialEndDate\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const consistentDefaultValue = useMemo(() => defaultValue, [])\n const isClearDisabled = startDate === consistentDefaultValue\n\n const handleTimePeriodChange = useCallback(\n (time, resolution) => {\n setResolution(resolution)\n setDates({\n startDate: time,\n endDate: 0,\n })\n },\n [setDates, setResolution]\n )\n const onDatepickerChange = (startDate, endDate) => {\n setDates({ startDate, endDate })\n const date = focusTagging === \"finish\" ? endDate || startDate : startDate || endDate\n reportEvent(\"date-picker\", \"click-date-picker\", tagging, String(date))\n }\n\n const pickerDrop =\n ref.current && isOpen ? (\n <StyledDrop\n target={ref.current}\n canHideTarget={false}\n align={{ top: \"bottom\", left: \"left\" }}\n onEsc={close}\n onClickOutside={close}\n >\n <PickerBox data-testid=\"datePicker\">\n <Flex justifyContent=\"between\" alignItems=\"center\" width=\"100%\" padding={[6, 6, 0, 6]}>\n <Flex column gap={3} margin={[0, 7, 0, 0]}>\n <TimePeriods\n handleTimePeriodChange={handleTimePeriodChange}\n selectedDate={startDate}\n tagging={tagging}\n />\n <CustomTimePeriod\n handleTimePeriodChange={handleTimePeriodChange}\n value={startDate}\n resolution={resolution}\n tagging={tagging}\n />\n </Flex>\n <StyledHR />\n <DatePickerWrapper\n startDate={startDate}\n endDate={endDate}\n setStartDate={setStartDate}\n setEndDate={setEndDate}\n onDatesChange={onDatepickerChange}\n onInputFocus={onInputFocus}\n />\n </Flex>\n <Flex\n alignItems=\"center\"\n justifyContent={isValidTimePeriod ? \"between\" : \"end\"}\n width=\"100%\"\n padding={[5, 6]}\n gap={2}\n >\n {isValidTimePeriod && <PeriodIndication startDate={startDate} endDate={endDate} />}\n <Flex alignItems=\"center\" justifyContent=\"center\" gap={4}>\n <Button\n label=\"Clear\"\n flavour=\"hollow\"\n onClick={clearChanges}\n disabled={isClearDisabled}\n data-ga={`date-picker::click-clear::${tagging}-${focusTagging}`}\n data-testid=\"datePicker-clear\"\n />\n <Button\n label=\"Apply\"\n onClick={applyChanges}\n disabled={!isValidTimePeriod || isApplyDisabled}\n data-ga={`date-picker::click-apply::${tagging}-${focusTagging}`}\n data-testid=\"datePicker-apply\"\n />\n </Flex>\n </Flex>\n </PickerBox>\n </StyledDrop>\n ) : null\n\n return (\n <>\n <AccessorElement\n onClick={togglePicker}\n tagging={tagging}\n isPickerOpen={isOpen}\n isPlaying={isPlaying}\n setRangeValues={onChange}\n start={initialStartDate}\n end={initialEndDate}\n ref={ref}\n />\n {pickerDrop}\n </>\n )\n}\n\nexport default DatePickerDrop\n","import React, { memo, useEffect, useMemo } from \"react\"\nimport {\n useDispatch as useDashboardDispatch,\n useSelector as useDashboardSelector,\n} from \"store/redux-separate-context\"\nimport {\n resetGlobalPanAndZoomAction,\n setGlobalPanAndZoomAction,\n setDefaultAfterAction,\n} from \"domains/global/actions\"\nimport { selectDefaultAfter, selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport { setHashParams } from \"utils/hash-utils\"\nimport DatePickerDrop from \"./datePickerDrop\"\n\nconst ReduxDatePickerContainer = memo(({ tagging, isPlaying }) => {\n const dashboardDispatch = useDashboardDispatch()\n\n const globalPanAndZoom = useDashboardSelector(selectGlobalPanAndZoom)\n const isGlobalPanAndZoom = Boolean(globalPanAndZoom)\n\n const defaultAfter = useDashboardSelector(selectDefaultAfter)\n const pickedValues = useMemo(\n () =>\n isGlobalPanAndZoom\n ? { start: globalPanAndZoom.after, end: globalPanAndZoom.before }\n : {\n start: defaultAfter,\n end: 0,\n },\n [isGlobalPanAndZoom, globalPanAndZoom, defaultAfter]\n )\n\n function handlePickedValuesChange(params) {\n const { start, end } = params\n if (start < 0) {\n // live mode\n dashboardDispatch(\n // changes the default value, so it becomes inconsistent\n setDefaultAfterAction({\n after: start,\n })\n )\n if (isGlobalPanAndZoom) {\n dashboardDispatch(resetGlobalPanAndZoomAction())\n }\n } else {\n // global-pan-and-zoom mode\n dashboardDispatch(\n setGlobalPanAndZoomAction({\n after: start,\n before: end,\n })\n )\n }\n }\n\n useEffect(() => {\n const { start, end } = pickedValues\n setHashParams({ after: start.toString(), before: end.toString() })\n }, [pickedValues])\n return (\n <DatePickerDrop\n values={pickedValues}\n defaultValue={defaultAfter}\n onChange={handlePickedValuesChange}\n tagging={tagging}\n isPlaying={isPlaying}\n />\n )\n})\n\nexport default ReduxDatePickerContainer\n","import styled from \"styled-components\"\nimport { Flex, getRgbColor } from \"@netdata/netdata-ui\"\n\nconst getBackground = ({ theme, isPlaying }) => {\n const { name } = theme\n\n const background =\n name === \"Dark\"\n ? getRgbColor(isPlaying ? [\"green\", \"netdata\"] : [\"neutral\", \"tuna\"], isPlaying ? 0.3 : 1)\n : getRgbColor(isPlaying ? [\"green\", \"frostee\"] : [\"neutral\", \"blackhaze\"])\n\n return background({ theme })\n}\n\nconst Container = styled(Flex)`\n background: ${getBackground};\n`\n\nexport default Container\n","import styled from \"styled-components\"\nimport { Pill, getColor } from \"@netdata/netdata-ui\"\n\nconst getHoverColor = ({ isPlaying }) =>\n getColor(isPlaying ? [\"green\", \"chateau\"] : [\"neutral\", \"iron\"])\n\nconst StyledPill = styled(Pill).attrs(({ isPlaying }) => ({\n flavour: isPlaying ? \"success\" : \"neutral\",\n}))`\n &:hover {\n background: ${getHoverColor};\n border-color: ${getHoverColor};\n }\n`\n\nexport default StyledPill\n","import React, { useMemo } from \"react\"\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { resetGlobalPauseAction, setGlobalPauseAction } from \"domains/global/actions\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport StyledPill from \"./styledPill\"\n\nconst getIcon = (isPlaying, isForcePlaying) => {\n if (!isPlaying) return \"pauseSolid\"\n return isForcePlaying ? \"forcePlay\" : \"playSolid\"\n}\n\nconst PlayPausePill = ({ isPlaying, isForcePlaying }) => {\n const dispatch = useDispatch()\n\n const onPlay = () => dispatch(resetGlobalPauseAction({ forcePlay: false }))\n const onPause = () => dispatch(setGlobalPauseAction())\n const icon = useMemo(() => getIcon(isPlaying, isForcePlaying), [isPlaying, isForcePlaying])\n\n return (\n <Tooltip content={isPlaying ? \"Click to pause\" : \"Click to play\"} align=\"bottom\" plain>\n <StyledPill icon={icon} onClick={isPlaying ? onPause : onPlay} isPlaying={isPlaying}>\n {isPlaying ? \"Playing\" : \"Paused\"}\n </StyledPill>\n </Tooltip>\n )\n}\n\nexport default PlayPausePill\n","import React, { useCallback, forwardRef } from \"react\"\nimport styled from \"styled-components\"\nimport { getColor, Flex, Icon, Text } from \"@netdata/netdata-ui\"\n\nexport const PanelRowContainer = styled(Flex)`\n cursor: pointer;\n\n &:hover {\n background: ${getColor(\"selected\")};\n }\n\n ${props => props.selected && `background: ${getColor(\"selected\")(props)};`}\n`\n\nconst MenuItem = forwardRef(\n (\n {\n disabled,\n children,\n Wrapper = Text,\n onClick,\n testid,\n icon,\n padding = [2, 3],\n margin = [0],\n round = 0,\n actions,\n selected,\n width = \"100%\",\n },\n ref\n ) => {\n const click = useCallback(() => {\n if (disabled) return\n if (onClick) onClick()\n }, [onClick, disabled])\n\n return (\n <PanelRowContainer\n ref={ref}\n flexWrap={false}\n justifyContent=\"between\"\n alignItems=\"center\"\n padding={padding}\n margin={margin}\n round={round}\n onClick={click}\n data-testid={testid}\n width={width}\n selected={selected}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={3} flex basis=\"\">\n {typeof icon === \"string\" ? (\n <Icon name={icon} disabled={disabled} color=\"text\" height=\"16px\" width=\"16px\" />\n ) : (\n icon\n )}\n <Wrapper opacity={disabled ? \"medium\" : undefined} width=\"150px\">\n {children}\n </Wrapper>\n </Flex>\n {actions}\n </PanelRowContainer>\n )\n }\n)\n\nexport default MenuItem\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, H4, Collapsible } from \"@netdata/netdata-ui\"\n\nexport const DefaultListHeader = styled(H4).attrs({ padding: [0], margin: [0] })`\n cursor: pointer;\n`\n\nconst SectionHandle = ({ toggleOpen, label, testid, Header = DefaultListHeader }) => (\n <Header data-testid={testid} onClick={toggleOpen}>\n {label}\n </Header>\n)\n\nconst ItemsList = ({ isOpen = false, toggleOpen, label, children, testid, Header }) => (\n <Flex column>\n <SectionHandle Header={Header} toggleOpen={toggleOpen} label={label} testid={testid} />\n <Collapsible open={isOpen}>{children}</Collapsible>\n </Flex>\n)\n\nexport default ItemsList\n","import React from \"react\"\nimport { Flex, TextSmall } from \"@netdata/netdata-ui\"\n\nconst PlayOptionsTooltip = () => (\n <Flex\n padding={[1, 2]}\n margin={[1]}\n background={[\"neutral\", \"black\"]}\n round={1}\n justifyContent=\"center\"\n width={{ max: \"320px\" }}\n >\n <TextSmall color=\"bright\">\n Play to refresh and have live content, pause to see historical, or force play to keep\n refreshing even when the tab loses focus at the expense of some system performance.\n </TextSmall>\n </Flex>\n)\n\nexport default PlayOptionsTooltip\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nexport const Divider = styled(Flex).attrs({\n bacgkround: \"disabled\",\n height: \"1px\",\n margin: [2, 6],\n})``\n","import React, { memo, Fragment } from \"react\"\nimport styled from \"styled-components\"\nimport { useToggle } from \"react-use\"\nimport { Flex, Icon, Drop } from \"@netdata/netdata-ui\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { resetGlobalPauseAction, setGlobalPauseAction } from \"domains/global/actions\"\nimport Tooltip from \"@/src/components/tooltips\"\nimport PlayOptionsTooltip from \"./playOptionsTooltip\"\n\nconst MenuButton = styled(Flex).attrs({ padding: [1], role: \"button\" })`\n cursor: pointer;\n`\n\nconst Dropdown = styled(Flex).attrs({\n column: true,\n padding: [2],\n background: \"dropdown\",\n round: 1,\n overflow: { vertical: \"auto\" },\n margin: [2, 0, 0],\n width: 40,\n})`\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\n\nconst PlayOptions = ({ target }) => {\n const dispatch = useDispatch()\n const [isOpen, toggle] = useToggle()\n\n const close = () => toggle(false)\n\n const onPlay = () => {\n dispatch(resetGlobalPauseAction({ forcePlay: false }))\n close()\n }\n\n const onPause = () => {\n dispatch(setGlobalPauseAction())\n close()\n }\n\n const onForcePlay = () => {\n dispatch(resetGlobalPauseAction({ forcePlay: true }))\n close()\n }\n\n return (\n <Fragment>\n {!isOpen ? (\n <Tooltip content={<PlayOptionsTooltip />} align=\"bottom\" plain>\n <MenuButton onClick={toggle} width=\"auto\">\n <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n </MenuButton>\n </Tooltip>\n ) : (\n <MenuButton onClick={toggle} width=\"auto\">\n <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n </MenuButton>\n )}\n {target.current && isOpen && (\n <Drop\n target={target.current}\n align={{ top: \"bottom\", left: \"left\" }}\n onEsc={close}\n onClickOutside={close}\n animation\n >\n <Dropdown>\n <MenuItem round={1} icon=\"playOutline\" onClick={onPlay}>\n Play\n </MenuItem>\n <MenuItem round={1} icon=\"pauseOutline\" onClick={onPause}>\n Pause\n </MenuItem>\n <MenuItem round={1} icon=\"forcePlayOutline\" onClick={onForcePlay}>\n Force Play\n </MenuItem>\n </Dropdown>\n </Drop>\n )}\n </Fragment>\n )\n}\n\nconst MemoizedPlayOptions = memo(PlayOptions)\n\nexport default MemoizedPlayOptions\n","import React, { useMemo, useRef } from \"react\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n selectHasWindowFocus,\n selectStopUpdatesWhenFocusIsLost,\n selectGlobalPanAndZoom,\n selectGlobalPause,\n selectGlobalSelection,\n} from \"domains/global/selectors\"\nimport { ReduxDatePickerContainer } from \"components/date-picker\"\nimport Item from \"../item\"\nimport Container from \"./container\"\nimport PlayPausePill from \"./playPausePill\"\nimport PlayOptions from \"./playOptions\"\n\nconst tagging = \"global-view\"\n\nconst GlobalControls = () => {\n const ref = useRef()\n const hasWindowFocus = useSelector(selectHasWindowFocus)\n const stopUpdatesWhenFocusIsLost = useSelector(selectStopUpdatesWhenFocusIsLost)\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const hoveredX = useSelector(selectGlobalSelection)\n const globalPause = useSelector(selectGlobalPause)\n\n const isPlaying = useMemo(\n () =>\n Boolean(\n (hasWindowFocus || !stopUpdatesWhenFocusIsLost) &&\n !globalPanAndZoom &&\n !hoveredX &&\n !globalPause\n ),\n [hasWindowFocus, stopUpdatesWhenFocusIsLost, globalPanAndZoom, hoveredX, globalPause]\n )\n\n return (\n <Item hasBorder>\n <Container\n isPlaying={isPlaying}\n padding={[2, 2]}\n round\n height=\"100%\"\n alignItems=\"center\"\n gap={1}\n ref={ref}\n >\n <PlayPausePill isPlaying={isPlaying} isForcePlaying={!stopUpdatesWhenFocusIsLost} />\n <PlayOptions target={ref} />\n <ReduxDatePickerContainer isPlaying={isPlaying} tagging={tagging} />\n </Container>\n </Item>\n )\n}\n\nexport default GlobalControls\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst hollowColors = {\n warning: \"#FFF8E1\",\n error: \"#FFEBEF\",\n}\n\nconst StyledPill = styled(Flex).attrs(({ round = 999, hollow, background }) => ({\n padding: [0.5, 2],\n round,\n border: hollow ? { side: \"all\", color: background, size: \"1px\" } : false,\n}))`\n background: ${({ background, hollow }) => (hollow ? hollowColors[background] : background)};\n cursor: pointer;\n`\n\nexport default StyledPill\n","import React, { forwardRef } from \"react\"\nimport { TextMicro } from \"@netdata/netdata-ui\"\nimport StyledPill from \"./styled\"\n\nconst Pill = forwardRef(({ children, background, color, hollow, ...rest }, ref) => (\n <StyledPill background={background} hollow={hollow} ref={ref} {...rest}>\n <TextMicro color={hollow ? background : color} strong>\n {children}\n </TextMicro>\n </StyledPill>\n))\n\nexport default Pill\n","import React, { useMemo } from \"react\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectActiveAlarms } from \"domains/global/selectors\"\nimport Item from \"./item\"\nimport Pill from \"./pill\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst pillProps = {\n \"data-toggle\": \"modal\",\n \"data-target\": \"#alarmsModal\",\n}\n\nconst Alarms = () => {\n const activeAlarms = useSelector(selectActiveAlarms)\n\n const alarms = useMemo(() => (activeAlarms ? Object.values(activeAlarms.alarms) : []), [\n activeAlarms,\n ])\n\n const { critical, warning } = useMemo(\n () =>\n alarms.reduce(\n (acc, { status }) => {\n if (status === \"CRITICAL\") acc.critical = acc.critical + 1\n if (status === \"WARNING\") acc.warning = acc.warning + 1\n return acc\n },\n { critical: 0, warning: 0 }\n ),\n [alarms]\n )\n\n return (\n <Item icon=\"alarm\">\n <Tooltip\n content={\n critical\n ? `${critical} critical alert${critical.length > 1 ? \"s\" : \"\"}`\n : \"No critical alerts\"\n }\n align=\"bottom\"\n plain\n >\n <Pill background=\"error\" hollow {...pillProps}>\n {critical}\n </Pill>\n </Tooltip>\n <Tooltip\n content={\n warning ? `${warning} warning alert${warning.length > 1 ? \"s\" : \"\"}` : \"No warning alerts\"\n }\n align=\"bottom\"\n plain\n >\n <Pill background=\"warning\" hollow {...pillProps}>\n {warning}\n </Pill>\n </Tooltip>\n </Item>\n )\n}\n\nexport default Alarms\n","import React from \"react\"\nimport { Button, News as AgentNews } from \"@netdata/netdata-ui\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst News = () => {\n return (\n <AgentNews app=\"agent\">\n {({ toggle, upToDate }) => (\n <Tooltip content=\"News\" align=\"bottom\" plain>\n <Button\n themeType=\"dark\"\n name=\"news\"\n icon=\"insights\"\n flavour=\"borderless\"\n neutral={upToDate}\n warning={!upToDate}\n onClick={toggle}\n />\n </Tooltip>\n )}\n </AgentNews>\n )\n}\n\nexport default News\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Dropdown = styled(Flex).attrs({\n column: true,\n padding: [2],\n background: \"dropdown\",\n round: 1,\n overflow: { vertical: \"auto\" },\n margin: [2, 0, 0],\n width: 80,\n})`\n box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n`\n\nexport default Dropdown\n","import styled from \"styled-components\"\nimport { TextInput } from \"@netdata/netdata-ui\"\n\nconst SearchInput = styled(TextInput)`\n & input {\n background: transparent;\n }\n\n & > label {\n margin-bottom: 0;\n }\n`\nexport default SearchInput\n","import React, { forwardRef } from \"react\"\nimport SearchInput from \"./searchInput\"\n\nconst Search = forwardRef(({ value, onChange }, ref) => (\n <SearchInput inputRef={ref} value={value} onChange={onChange} placeholder=\"Search\" metaShrinked />\n))\n\nexport default Search\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Container = styled(Flex).attrs({\n column: true,\n padding: [2, 0, 0],\n overflow: { vertical: \"auto\" },\n height: { max: \"320px\" },\n})``\n\nexport default Container\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Wrapper = styled(Flex).attrs({\n justifyContent: \"between\",\n alignItems: \"center\",\n width: \"100%\",\n gap: 2,\n})``\n\nexport default Wrapper\n","import React, { useCallback } from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport Wrapper from \"./wrapper\"\n\nconst OffsetItem = ({ name, offset, utc, onSelect }) => {\n const onClick = useCallback(() => onSelect(utc), [utc, onSelect])\n\n return (\n <MenuItem round={1} onClick={onClick} Wrapper={Wrapper}>\n <Text color=\"text\">{name}</Text>\n <Text color=\"textLite\" whiteSpace=\"nowrap\">\n UTC {offset}\n </Text>\n </MenuItem>\n )\n}\n\nexport default OffsetItem\n","export const timezones = [\n {\n value: \"Dateline Standard Time\",\n abbr: \"DST\",\n text: \"International Date Line West\",\n utc: [\"Etc/GMT+12\"],\n },\n {\n value: \"UTC-11\",\n abbr: \"U\",\n text: \"Coordinated Universal Time-11\",\n utc: [\"Etc/GMT+11\", \"Pacific/Midway\", \"Pacific/Niue\", \"Pacific/Pago_Pago\"],\n },\n {\n value: \"Hawaiian Standard Time\",\n abbr: \"HST\",\n text: \"Hawaii\",\n utc: [\n \"Etc/GMT+10\",\n \"Pacific/Honolulu\",\n \"Pacific/Johnston\",\n \"Pacific/Rarotonga\",\n \"Pacific/Tahiti\",\n ],\n },\n {\n value: \"Alaskan Standard Time\",\n abbr: \"AKDT\",\n text: \"Alaska\",\n utc: [\n \"America/Anchorage\",\n \"America/Juneau\",\n \"America/Nome\",\n \"America/Sitka\",\n \"America/Yakutat\",\n ],\n },\n {\n value: \"Pacific Standard Time (Mexico)\",\n abbr: \"PDT\",\n text: \"Baja California\",\n utc: [\"America/Santa_Isabel\"],\n },\n {\n value: \"Pacific Standard Time\",\n abbr: \"PST\",\n text: \"Pacific Time (US & Canada)\",\n utc: [\n \"America/Dawson\",\n \"America/Los_Angeles\",\n \"America/Tijuana\",\n \"America/Vancouver\",\n \"America/Whitehorse\",\n \"PST8PDT\",\n ],\n },\n {\n value: \"US Mountain Standard Time\",\n abbr: \"UMST\",\n text: \"Arizona\",\n utc: [\n \"America/Creston\",\n \"America/Dawson_Creek\",\n \"America/Hermosillo\",\n \"America/Phoenix\",\n \"Etc/GMT+7\",\n ],\n },\n {\n value: \"Mountain Standard Time (Mexico)\",\n abbr: \"MDT\",\n text: \"Chihuahua, La Paz, Mazatlan\",\n utc: [\"America/Chihuahua\", \"America/Mazatlan\"],\n },\n {\n value: \"Mountain Standard Time\",\n abbr: \"MDT\",\n text: \"Mountain Time (US & Canada)\",\n utc: [\n \"America/Boise\",\n \"America/Cambridge_Bay\",\n \"America/Denver\",\n \"America/Edmonton\",\n \"America/Inuvik\",\n \"America/Ojinaga\",\n \"America/Yellowknife\",\n \"MST7MDT\",\n ],\n },\n {\n value: \"Central America Standard Time\",\n abbr: \"CAST\",\n text: \"Central America\",\n utc: [\n \"America/Belize\",\n \"America/Costa_Rica\",\n \"America/El_Salvador\",\n \"America/Guatemala\",\n \"America/Managua\",\n \"America/Tegucigalpa\",\n \"Etc/GMT+6\",\n \"Pacific/Galapagos\",\n ],\n },\n {\n value: \"Central Standard Time\",\n abbr: \"CDT\",\n text: \"Central Time (US & Canada)\",\n utc: [\n \"America/Chicago\",\n \"America/Indiana/Knox\",\n \"America/Indiana/Tell_City\",\n \"America/Matamoros\",\n \"America/Menominee\",\n \"America/North_Dakota/Beulah\",\n \"America/North_Dakota/Center\",\n \"America/North_Dakota/New_Salem\",\n \"America/Rainy_River\",\n \"America/Rankin_Inlet\",\n \"America/Resolute\",\n \"America/Winnipeg\",\n \"CST6CDT\",\n ],\n },\n {\n value: \"Central Standard Time (Mexico)\",\n abbr: \"CDT\",\n text: \"Guadalajara, Mexico City, Monterrey\",\n utc: [\n \"America/Bahia_Banderas\",\n \"America/Cancun\",\n \"America/Merida\",\n \"America/Mexico_City\",\n \"America/Monterrey\",\n ],\n },\n {\n value: \"Canada Central Standard Time\",\n abbr: \"CCST\",\n text: \"Saskatchewan\",\n utc: [\"America/Regina\", \"America/Swift_Current\"],\n },\n {\n value: \"SA Pacific Standard Time\",\n abbr: \"SPST\",\n text: \"Bogota, Lima, Quito\",\n utc: [\n \"America/Bogota\",\n \"America/Cayman\",\n \"America/Coral_Harbour\",\n \"America/Eirunepe\",\n \"America/Guayaquil\",\n \"America/Jamaica\",\n \"America/Lima\",\n \"America/Panama\",\n \"America/Rio_Branco\",\n \"Etc/GMT+5\",\n ],\n },\n {\n value: \"Eastern Standard Time\",\n abbr: \"EDT\",\n text: \"Eastern Time (US & Canada)\",\n utc: [\n \"America/Detroit\",\n \"America/Havana\",\n \"America/Indiana/Petersburg\",\n \"America/Indiana/Vincennes\",\n \"America/Indiana/Winamac\",\n \"America/Iqaluit\",\n \"America/Kentucky/Monticello\",\n \"America/Louisville\",\n \"America/Montreal\",\n \"America/Nassau\",\n \"America/New_York\",\n \"America/Nipigon\",\n \"America/Pangnirtung\",\n \"America/Port-au-Prince\",\n \"America/Thunder_Bay\",\n \"America/Toronto\",\n \"EST5EDT\",\n ],\n },\n {\n value: \"US Eastern Standard Time\",\n abbr: \"UEDT\",\n text: \"Indiana (East)\",\n utc: [\"America/Indiana/Marengo\", \"America/Indiana/Vevay\", \"America/Indianapolis\"],\n },\n {\n value: \"Venezuela Standard Time\",\n abbr: \"VST\",\n text: \"Caracas\",\n utc: [\"America/Caracas\"],\n },\n {\n value: \"Paraguay Standard Time\",\n abbr: \"PYT\",\n text: \"Asuncion\",\n utc: [\"America/Asuncion\"],\n },\n {\n value: \"Atlantic Standard Time\",\n abbr: \"ADT\",\n text: \"Atlantic Time (Canada)\",\n utc: [\n \"America/Glace_Bay\",\n \"America/Goose_Bay\",\n \"America/Halifax\",\n \"America/Moncton\",\n \"America/Thule\",\n \"Atlantic/Bermuda\",\n ],\n },\n {\n value: \"Central Brazilian Standard Time\",\n abbr: \"CBST\",\n text: \"Cuiaba\",\n utc: [\"America/Campo_Grande\", \"America/Cuiaba\"],\n },\n {\n value: \"SA Western Standard Time\",\n abbr: \"SWST\",\n text: \"Georgetown, La Paz, Manaus, San Juan\",\n utc: [\n \"America/Anguilla\",\n \"America/Antigua\",\n \"America/Aruba\",\n \"America/Barbados\",\n \"America/Blanc-Sablon\",\n \"America/Boa_Vista\",\n \"America/Curacao\",\n \"America/Dominica\",\n \"America/Grand_Turk\",\n \"America/Grenada\",\n \"America/Guadeloupe\",\n \"America/Guyana\",\n \"America/Kralendijk\",\n \"America/La_Paz\",\n \"America/Lower_Princes\",\n \"America/Manaus\",\n \"America/Marigot\",\n \"America/Martinique\",\n \"America/Montserrat\",\n \"America/Port_of_Spain\",\n \"America/Porto_Velho\",\n \"America/Puerto_Rico\",\n \"America/Santo_Domingo\",\n \"America/St_Barthelemy\",\n \"America/St_Kitts\",\n \"America/St_Lucia\",\n \"America/St_Thomas\",\n \"America/St_Vincent\",\n \"America/Tortola\",\n \"Etc/GMT+4\",\n ],\n },\n {\n value: \"Pacific SA Standard Time\",\n abbr: \"PSST\",\n text: \"Santiago\",\n utc: [\"America/Santiago\", \"Antarctica/Palmer\"],\n },\n {\n value: \"Newfoundland Standard Time\",\n abbr: \"NDT\",\n text: \"Newfoundland\",\n utc: [\"America/St_Johns\"],\n },\n {\n value: \"E. South America Standard Time\",\n abbr: \"ESAST\",\n text: \"Brasilia\",\n utc: [\"America/Sao_Paulo\"],\n },\n {\n value: \"Argentina Standard Time\",\n abbr: \"AST\",\n text: \"Buenos Aires\",\n utc: [\n \"America/Argentina/La_Rioja\",\n \"America/Argentina/Rio_Gallegos\",\n \"America/Argentina/Salta\",\n \"America/Argentina/San_Juan\",\n \"America/Argentina/San_Luis\",\n \"America/Argentina/Tucuman\",\n \"America/Argentina/Ushuaia\",\n \"America/Buenos_Aires\",\n \"America/Catamarca\",\n \"America/Cordoba\",\n \"America/Jujuy\",\n \"America/Mendoza\",\n ],\n },\n {\n value: \"SA Eastern Standard Time\",\n abbr: \"SEST\",\n text: \"Cayenne, Fortaleza\",\n utc: [\n \"America/Araguaina\",\n \"America/Belem\",\n \"America/Cayenne\",\n \"America/Fortaleza\",\n \"America/Maceio\",\n \"America/Paramaribo\",\n \"America/Recife\",\n \"America/Santarem\",\n \"Antarctica/Rothera\",\n \"Atlantic/Stanley\",\n \"Etc/GMT+3\",\n ],\n },\n {\n value: \"Greenland Standard Time\",\n abbr: \"GDT\",\n text: \"Greenland\",\n utc: [\"America/Godthab\"],\n },\n {\n value: \"Montevideo Standard Time\",\n abbr: \"MST\",\n text: \"Montevideo\",\n utc: [\"America/Montevideo\"],\n },\n {\n value: \"Bahia Standard Time\",\n abbr: \"BST\",\n text: \"Salvador\",\n utc: [\"America/Bahia\"],\n },\n {\n value: \"UTC-02\",\n abbr: \"U\",\n text: \"Coordinated Universal Time-02\",\n utc: [\"America/Noronha\", \"Atlantic/South_Georgia\", \"Etc/GMT+2\"],\n },\n {\n value: \"Mid-Atlantic Standard Time\",\n abbr: \"MDT\",\n text: \"Mid-Atlantic - Old\",\n utc: [],\n },\n {\n value: \"Azores Standard Time\",\n abbr: \"ADT\",\n text: \"Azores\",\n utc: [\"America/Scoresbysund\", \"Atlantic/Azores\"],\n },\n {\n value: \"Cape Verde Standard Time\",\n abbr: \"CVST\",\n text: \"Cape Verde Is.\",\n utc: [\"Atlantic/Cape_Verde\", \"Etc/GMT+1\"],\n },\n {\n value: \"Morocco Standard Time\",\n abbr: \"MDT\",\n text: \"Casablanca\",\n utc: [\"Africa/Casablanca\", \"Africa/El_Aaiun\"],\n },\n {\n value: \"UTC\",\n abbr: \"UTC\",\n text: \"Coordinated Universal Time\",\n utc: [\"America/Danmarkshavn\", \"Etc/GMT\"],\n },\n {\n value: \"GMT Standard Time\",\n abbr: \"GMT\",\n text: \"Edinburgh, London\",\n utc: [\"Europe/Isle_of_Man\", \"Europe/Guernsey\", \"Europe/Jersey\", \"Europe/London\"],\n },\n {\n value: \"GMT Standard Time\",\n abbr: \"GDT\",\n text: \"Dublin, Lisbon\",\n utc: [\n \"Atlantic/Canary\",\n \"Atlantic/Faeroe\",\n \"Atlantic/Madeira\",\n \"Europe/Dublin\",\n \"Europe/Lisbon\",\n ],\n },\n {\n value: \"Greenwich Standard Time\",\n abbr: \"GST\",\n text: \"Monrovia, Reykjavik\",\n utc: [\n \"Africa/Abidjan\",\n \"Africa/Accra\",\n \"Africa/Bamako\",\n \"Africa/Banjul\",\n \"Africa/Bissau\",\n \"Africa/Conakry\",\n \"Africa/Dakar\",\n \"Africa/Freetown\",\n \"Africa/Lome\",\n \"Africa/Monrovia\",\n \"Africa/Nouakchott\",\n \"Africa/Ouagadougou\",\n \"Africa/Sao_Tome\",\n \"Atlantic/Reykjavik\",\n \"Atlantic/St_Helena\",\n ],\n },\n {\n value: \"W. Europe Standard Time\",\n abbr: \"WEDT\",\n text: \"Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna\",\n utc: [\n \"Arctic/Longyearbyen\",\n \"Europe/Amsterdam\",\n \"Europe/Andorra\",\n \"Europe/Berlin\",\n \"Europe/Busingen\",\n \"Europe/Gibraltar\",\n \"Europe/Luxembourg\",\n \"Europe/Malta\",\n \"Europe/Monaco\",\n \"Europe/Oslo\",\n \"Europe/Rome\",\n \"Europe/San_Marino\",\n \"Europe/Stockholm\",\n \"Europe/Vaduz\",\n \"Europe/Vatican\",\n \"Europe/Vienna\",\n \"Europe/Zurich\",\n ],\n },\n {\n value: \"Central Europe Standard Time\",\n abbr: \"CEDT\",\n text: \"Belgrade, Bratislava, Budapest, Ljubljana, Prague\",\n utc: [\n \"Europe/Belgrade\",\n \"Europe/Bratislava\",\n \"Europe/Budapest\",\n \"Europe/Ljubljana\",\n \"Europe/Podgorica\",\n \"Europe/Prague\",\n \"Europe/Tirane\",\n ],\n },\n {\n value: \"Romance Standard Time\",\n abbr: \"RDT\",\n text: \"Brussels, Copenhagen, Madrid, Paris\",\n utc: [\"Africa/Ceuta\", \"Europe/Brussels\", \"Europe/Copenhagen\", \"Europe/Madrid\", \"Europe/Paris\"],\n },\n {\n value: \"Central European Standard Time\",\n abbr: \"CEDT\",\n text: \"Sarajevo, Skopje, Warsaw, Zagreb\",\n utc: [\"Europe/Sarajevo\", \"Europe/Skopje\", \"Europe/Warsaw\", \"Europe/Zagreb\"],\n },\n {\n value: \"W. Central Africa Standard Time\",\n abbr: \"WCAST\",\n text: \"West Central Africa\",\n utc: [\n \"Africa/Algiers\",\n \"Africa/Bangui\",\n \"Africa/Brazzaville\",\n \"Africa/Douala\",\n \"Africa/Kinshasa\",\n \"Africa/Lagos\",\n \"Africa/Libreville\",\n \"Africa/Luanda\",\n \"Africa/Malabo\",\n \"Africa/Ndjamena\",\n \"Africa/Niamey\",\n \"Africa/Porto-Novo\",\n \"Africa/Tunis\",\n \"Etc/GMT-1\",\n ],\n },\n {\n value: \"Namibia Standard Time\",\n abbr: \"NST\",\n text: \"Windhoek\",\n utc: [\"Africa/Windhoek\"],\n },\n {\n value: \"GTB Standard Time\",\n abbr: \"GDT\",\n text: \"Athens, Bucharest\",\n utc: [\"Asia/Nicosia\", \"Europe/Athens\", \"Europe/Bucharest\", \"Europe/Chisinau\"],\n },\n {\n value: \"Middle East Standard Time\",\n abbr: \"MEDT\",\n text: \"Beirut\",\n utc: [\"Asia/Beirut\"],\n },\n {\n value: \"Egypt Standard Time\",\n abbr: \"EST\",\n text: \"Cairo\",\n utc: [\"Africa/Cairo\"],\n },\n {\n value: \"Syria Standard Time\",\n abbr: \"SDT\",\n text: \"Damascus\",\n utc: [\"Asia/Damascus\"],\n },\n {\n value: \"E. Europe Standard Time\",\n abbr: \"EEDT\",\n text: \"E. Europe\",\n utc: [\n \"Asia/Nicosia\",\n \"Europe/Athens\",\n \"Europe/Bucharest\",\n \"Europe/Chisinau\",\n \"Europe/Helsinki\",\n \"Europe/Kiev\",\n \"Europe/Mariehamn\",\n \"Europe/Nicosia\",\n \"Europe/Riga\",\n \"Europe/Sofia\",\n \"Europe/Tallinn\",\n \"Europe/Uzhgorod\",\n \"Europe/Vilnius\",\n \"Europe/Zaporozhye\",\n ],\n },\n {\n value: \"South Africa Standard Time\",\n abbr: \"SAST\",\n text: \"Harare, Pretoria\",\n utc: [\n \"Africa/Blantyre\",\n \"Africa/Bujumbura\",\n \"Africa/Gaborone\",\n \"Africa/Harare\",\n \"Africa/Johannesburg\",\n \"Africa/Kigali\",\n \"Africa/Lubumbashi\",\n \"Africa/Lusaka\",\n \"Africa/Maputo\",\n \"Africa/Maseru\",\n \"Africa/Mbabane\",\n \"Etc/GMT-2\",\n ],\n },\n {\n value: \"FLE Standard Time\",\n abbr: \"FDT\",\n text: \"Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius\",\n utc: [\n \"Europe/Helsinki\",\n \"Europe/Kiev\",\n \"Europe/Mariehamn\",\n \"Europe/Riga\",\n \"Europe/Sofia\",\n \"Europe/Tallinn\",\n \"Europe/Uzhgorod\",\n \"Europe/Vilnius\",\n \"Europe/Zaporozhye\",\n ],\n },\n {\n value: \"Turkey Standard Time\",\n abbr: \"TDT\",\n text: \"Istanbul\",\n utc: [\"Europe/Istanbul\"],\n },\n {\n value: \"Israel Standard Time\",\n abbr: \"JDT\",\n text: \"Jerusalem\",\n utc: [\"Asia/Jerusalem\"],\n },\n {\n value: \"Libya Standard Time\",\n abbr: \"LST\",\n text: \"Tripoli\",\n utc: [\"Africa/Tripoli\"],\n },\n {\n value: \"Jordan Standard Time\",\n abbr: \"JST\",\n text: \"Amman\",\n utc: [\"Asia/Amman\"],\n },\n {\n value: \"Arabic Standard Time\",\n abbr: \"AST\",\n text: \"Baghdad\",\n utc: [\"Asia/Baghdad\"],\n },\n {\n value: \"Kaliningrad Standard Time\",\n abbr: \"KST\",\n text: \"Kaliningrad\",\n utc: [\"Europe/Kaliningrad\"],\n },\n {\n value: \"Arab Standard Time\",\n abbr: \"AST\",\n text: \"Kuwait, Riyadh\",\n utc: [\"Asia/Aden\", \"Asia/Bahrain\", \"Asia/Kuwait\", \"Asia/Qatar\", \"Asia/Riyadh\"],\n },\n {\n value: \"E. Africa Standard Time\",\n abbr: \"EAST\",\n text: \"Nairobi\",\n utc: [\n \"Africa/Addis_Ababa\",\n \"Africa/Asmera\",\n \"Africa/Dar_es_Salaam\",\n \"Africa/Djibouti\",\n \"Africa/Juba\",\n \"Africa/Kampala\",\n \"Africa/Khartoum\",\n \"Africa/Mogadishu\",\n \"Africa/Nairobi\",\n \"Antarctica/Syowa\",\n \"Etc/GMT-3\",\n \"Indian/Antananarivo\",\n \"Indian/Comoro\",\n \"Indian/Mayotte\",\n ],\n },\n {\n value: \"Moscow Standard Time\",\n abbr: \"MSK\",\n text: \"Moscow, St. Petersburg, Volgograd, Minsk\",\n utc: [\"Europe/Kirov\", \"Europe/Moscow\", \"Europe/Simferopol\", \"Europe/Volgograd\", \"Europe/Minsk\"],\n },\n {\n value: \"Samara Time\",\n abbr: \"SAMT\",\n text: \"Samara, Ulyanovsk, Saratov\",\n utc: [\"Europe/Astrakhan\", \"Europe/Samara\", \"Europe/Ulyanovsk\"],\n },\n {\n value: \"Iran Standard Time\",\n abbr: \"IDT\",\n text: \"Tehran\",\n utc: [\"Asia/Tehran\"],\n },\n {\n value: \"Arabian Standard Time\",\n abbr: \"AST\",\n text: \"Abu Dhabi, Muscat\",\n utc: [\"Asia/Dubai\", \"Asia/Muscat\", \"Etc/GMT-4\"],\n },\n {\n value: \"Azerbaijan Standard Time\",\n abbr: \"ADT\",\n text: \"Baku\",\n utc: [\"Asia/Baku\"],\n },\n {\n value: \"Mauritius Standard Time\",\n abbr: \"MST\",\n text: \"Port Louis\",\n utc: [\"Indian/Mahe\", \"Indian/Mauritius\", \"Indian/Reunion\"],\n },\n {\n value: \"Georgian Standard Time\",\n abbr: \"GET\",\n text: \"Tbilisi\",\n utc: [\"Asia/Tbilisi\"],\n },\n {\n value: \"Caucasus Standard Time\",\n abbr: \"CST\",\n text: \"Yerevan\",\n utc: [\"Asia/Yerevan\"],\n },\n {\n value: \"Afghanistan Standard Time\",\n abbr: \"AST\",\n text: \"Kabul\",\n utc: [\"Asia/Kabul\"],\n },\n {\n value: \"West Asia Standard Time\",\n abbr: \"WAST\",\n text: \"Ashgabat, Tashkent\",\n utc: [\n \"Antarctica/Mawson\",\n \"Asia/Aqtau\",\n \"Asia/Aqtobe\",\n \"Asia/Ashgabat\",\n \"Asia/Dushanbe\",\n \"Asia/Oral\",\n \"Asia/Samarkand\",\n \"Asia/Tashkent\",\n \"Etc/GMT-5\",\n \"Indian/Kerguelen\",\n \"Indian/Maldives\",\n ],\n },\n {\n value: \"Yekaterinburg Time\",\n abbr: \"YEKT\",\n text: \"Yekaterinburg\",\n utc: [\"Asia/Yekaterinburg\"],\n },\n {\n value: \"Pakistan Standard Time\",\n abbr: \"PKT\",\n text: \"Islamabad, Karachi\",\n utc: [\"Asia/Karachi\"],\n },\n {\n value: \"India Standard Time\",\n abbr: \"IST\",\n text: \"Chennai, Kolkata, Mumbai, New Delhi\",\n utc: [\"Asia/Kolkata\"],\n },\n {\n value: \"Sri Lanka Standard Time\",\n abbr: \"SLST\",\n text: \"Sri Jayawardenepura\",\n utc: [\"Asia/Colombo\"],\n },\n {\n value: \"Nepal Standard Time\",\n abbr: \"NST\",\n text: \"Kathmandu\",\n utc: [\"Asia/Kathmandu\"],\n },\n {\n value: \"Central Asia Standard Time\",\n abbr: \"CAST\",\n text: \"Nur-Sultan (Astana)\",\n utc: [\n \"Antarctica/Vostok\",\n \"Asia/Almaty\",\n \"Asia/Bishkek\",\n \"Asia/Qyzylorda\",\n \"Asia/Urumqi\",\n \"Etc/GMT-6\",\n \"Indian/Chagos\",\n ],\n },\n {\n value: \"Bangladesh Standard Time\",\n abbr: \"BST\",\n text: \"Dhaka\",\n utc: [\"Asia/Dhaka\", \"Asia/Thimphu\"],\n },\n {\n value: \"Myanmar Standard Time\",\n abbr: \"MST\",\n text: \"Yangon (Rangoon)\",\n utc: [\"Asia/Rangoon\", \"Indian/Cocos\"],\n },\n {\n value: \"SE Asia Standard Time\",\n abbr: \"SAST\",\n text: \"Bangkok, Hanoi, Jakarta\",\n utc: [\n \"Antarctica/Davis\",\n \"Asia/Bangkok\",\n \"Asia/Hovd\",\n \"Asia/Jakarta\",\n \"Asia/Phnom_Penh\",\n \"Asia/Pontianak\",\n \"Asia/Saigon\",\n \"Asia/Vientiane\",\n \"Etc/GMT-7\",\n \"Indian/Christmas\",\n ],\n },\n {\n value: \"N. Central Asia Standard Time\",\n abbr: \"NCAST\",\n text: \"Novosibirsk\",\n utc: [\"Asia/Novokuznetsk\", \"Asia/Novosibirsk\", \"Asia/Omsk\"],\n },\n {\n value: \"China Standard Time\",\n abbr: \"CST\",\n text: \"Beijing, Chongqing, Hong Kong, Urumqi\",\n utc: [\"Asia/Hong_Kong\", \"Asia/Macau\", \"Asia/Shanghai\"],\n },\n {\n value: \"North Asia Standard Time\",\n abbr: \"NAST\",\n text: \"Krasnoyarsk\",\n utc: [\"Asia/Krasnoyarsk\"],\n },\n {\n value: \"Singapore Standard Time\",\n abbr: \"MPST\",\n text: \"Kuala Lumpur, Singapore\",\n utc: [\n \"Asia/Brunei\",\n \"Asia/Kuala_Lumpur\",\n \"Asia/Kuching\",\n \"Asia/Makassar\",\n \"Asia/Manila\",\n \"Asia/Singapore\",\n \"Etc/GMT-8\",\n ],\n },\n {\n value: \"W. Australia Standard Time\",\n abbr: \"WAST\",\n text: \"Perth\",\n utc: [\"Antarctica/Casey\", \"Australia/Perth\"],\n },\n {\n value: \"Taipei Standard Time\",\n abbr: \"TST\",\n text: \"Taipei\",\n utc: [\"Asia/Taipei\"],\n },\n {\n value: \"Ulaanbaatar Standard Time\",\n abbr: \"UST\",\n text: \"Ulaanbaatar\",\n utc: [\"Asia/Choibalsan\", \"Asia/Ulaanbaatar\"],\n },\n {\n value: \"North Asia East Standard Time\",\n abbr: \"NAEST\",\n text: \"Irkutsk\",\n utc: [\"Asia/Irkutsk\"],\n },\n {\n value: \"Japan Standard Time\",\n abbr: \"JST\",\n text: \"Osaka, Sapporo, Tokyo\",\n utc: [\"Asia/Dili\", \"Asia/Jayapura\", \"Asia/Tokyo\", \"Etc/GMT-9\", \"Pacific/Palau\"],\n },\n {\n value: \"Korea Standard Time\",\n abbr: \"KST\",\n text: \"Seoul\",\n utc: [\"Asia/Pyongyang\", \"Asia/Seoul\"],\n },\n {\n value: \"Cen. Australia Standard Time\",\n abbr: \"CAST\",\n text: \"Adelaide\",\n utc: [\"Australia/Adelaide\", \"Australia/Broken_Hill\"],\n },\n {\n value: \"AUS Central Standard Time\",\n abbr: \"ACST\",\n text: \"Darwin\",\n utc: [\"Australia/Darwin\"],\n },\n {\n value: \"E. Australia Standard Time\",\n abbr: \"EAST\",\n text: \"Brisbane\",\n utc: [\"Australia/Brisbane\", \"Australia/Lindeman\"],\n },\n {\n value: \"AUS Eastern Standard Time\",\n abbr: \"AEST\",\n text: \"Canberra, Melbourne, Sydney\",\n utc: [\"Australia/Melbourne\", \"Australia/Sydney\"],\n },\n {\n value: \"West Pacific Standard Time\",\n abbr: \"WPST\",\n text: \"Guam, Port Moresby\",\n utc: [\n \"Antarctica/DumontDUrville\",\n \"Etc/GMT-10\",\n \"Pacific/Guam\",\n \"Pacific/Port_Moresby\",\n \"Pacific/Saipan\",\n \"Pacific/Truk\",\n ],\n },\n {\n value: \"Tasmania Standard Time\",\n abbr: \"TST\",\n text: \"Hobart\",\n utc: [\"Australia/Currie\", \"Australia/Hobart\"],\n },\n {\n value: \"Yakutsk Standard Time\",\n abbr: \"YST\",\n text: \"Yakutsk\",\n utc: [\"Asia/Chita\", \"Asia/Khandyga\", \"Asia/Yakutsk\"],\n },\n {\n value: \"Central Pacific Standard Time\",\n abbr: \"CPST\",\n text: \"Solomon Is., New Caledonia\",\n utc: [\n \"Antarctica/Macquarie\",\n \"Etc/GMT-11\",\n \"Pacific/Efate\",\n \"Pacific/Guadalcanal\",\n \"Pacific/Kosrae\",\n \"Pacific/Noumea\",\n \"Pacific/Ponape\",\n ],\n },\n {\n value: \"Vladivostok Standard Time\",\n abbr: \"VST\",\n text: \"Vladivostok\",\n utc: [\"Asia/Sakhalin\", \"Asia/Ust-Nera\", \"Asia/Vladivostok\"],\n },\n {\n value: \"New Zealand Standard Time\",\n abbr: \"NZST\",\n text: \"Auckland, Wellington\",\n utc: [\"Antarctica/McMurdo\", \"Pacific/Auckland\"],\n },\n {\n value: \"UTC+12\",\n abbr: \"U\",\n text: \"Coordinated Universal Time+12\",\n utc: [\n \"Etc/GMT-12\",\n \"Pacific/Funafuti\",\n \"Pacific/Kwajalein\",\n \"Pacific/Majuro\",\n \"Pacific/Nauru\",\n \"Pacific/Tarawa\",\n \"Pacific/Wake\",\n \"Pacific/Wallis\",\n ],\n },\n {\n value: \"Fiji Standard Time\",\n abbr: \"FST\",\n text: \"Fiji\",\n utc: [\"Pacific/Fiji\"],\n },\n {\n value: \"Magadan Standard Time\",\n abbr: \"MST\",\n text: \"Magadan\",\n utc: [\"Asia/Anadyr\", \"Asia/Kamchatka\", \"Asia/Magadan\", \"Asia/Srednekolymsk\"],\n },\n {\n value: \"Kamchatka Standard Time\",\n abbr: \"KDT\",\n text: \"Petropavlovsk-Kamchatsky - Old\",\n utc: [\"Asia/Kamchatka\"],\n },\n {\n value: \"Tonga Standard Time\",\n abbr: \"TST\",\n text: \"Nuku'alofa\",\n utc: [\"Etc/GMT-13\", \"Pacific/Enderbury\", \"Pacific/Fakaofo\", \"Pacific/Tongatapu\"],\n },\n {\n value: \"Samoa Standard Time\",\n abbr: \"SST\",\n text: \"Samoa\",\n utc: [\"Pacific/Apia\"],\n },\n]\n","import { timezones } from \"./timezones\"\n\nconst digitizeOffset = parsedOffset => {\n if (!parsedOffset) return \"+0\"\n const splitOffset = parsedOffset.split(\":\")\n return splitOffset.length > 1\n ? `${splitOffset[0]}${(splitOffset[1] / 60).toString().substr(1)}`\n : splitOffset[0]\n}\n\nconst normalizeOffset = parsedOffset => (parsedOffset ? parsedOffset.replace(\"−\", \"-\") : \"\")\n\nconst now = new Date()\nexport const timezoneList = () => {\n const memoized = {}\n return timezones.reduce((acc, timezone) => {\n const { utc } = timezone\n\n try {\n // We use 'fr' locale because it is the only one that returns back the UTC offset (dd/mm/yyyy, UTC-x) \n // so we can parse it later and digitize it.\n const dateString = new Intl.DateTimeFormat(\"fr\", {\n timeZone: utc[0],\n timeZoneName: \"short\",\n }).format(now)\n\n const [parsedOffset] = dateString.match(/[−+].+/) || []\n const normalizedOffset = normalizeOffset(parsedOffset)\n\n if (memoized[normalizedOffset])\n return acc.concat({ ...timezone, offset: memoized[normalizedOffset] })\n\n const digitizedOffset = digitizeOffset(normalizedOffset)\n\n memoized[normalizedOffset] = digitizedOffset\n return acc.concat({ ...timezone, offset: digitizedOffset })\n } catch (e) {\n return acc\n }\n }, [])\n}\n\nexport const timezonesById = timezones =>\n timezones.reduce((acc, { utc, ...timezone }) => {\n utc.forEach(item => (acc[item] = { ...timezone, utc: item }))\n return acc\n }, {})\n\nexport const getDefaultTimezone = () => {\n const dateFormat = new Intl.DateTimeFormat(\"default\", {})\n const usedOptions = dateFormat.resolvedOptions()\n return usedOptions\n}\n","import React, { useRef, useState, useEffect, useMemo, useCallback } from \"react\"\nimport { useToggle } from \"react-use\"\nimport { Drop, Flex, Text, Icon } from \"@netdata/netdata-ui\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { setOptionAction } from \"@/src/domains/global/actions\"\nimport { selectTimezoneSetting } from \"domains/global/selectors\"\nimport { MenuItem } from \"@/src/components/menus\"\nimport Item from \"../item\"\nimport Dropdown from \"./dropdown\"\nimport Search from \"./search\"\nimport Container from \"./container\"\nimport Wrapper from \"./wrapper\"\nimport OffsetItem from \"./offsetItem\"\nimport { getDefaultTimezone, timezoneList, timezonesById } from \"./utils\"\nimport { getHashParams } from \"utils/hash-utils\"\n\nconst timezones = timezoneList().sort((a, b) => a.offset - b.offset)\nconst byId = timezonesById(timezones)\n\nconst getTimezone = (selectedTimezone, timezoneHash) => {\n const timezone = timezoneHash\n ? timezoneHash\n : selectedTimezone === \"default\"\n ? getDefaultTimezone().timeZone\n : selectedTimezone\n\n return byId[timezone in byId ? timezone : getDefaultTimezone().timeZone] || {}\n}\n\nconst Timezone = () => {\n const [value, setValue] = useState(\"\")\n const [isOpen, toggle] = useToggle()\n\n const ref = useRef()\n const inputRef = useRef()\n\n const { updateUtcParam } = window.urlOptions\n\n useEffect(() => {\n if (!inputRef.current || !isOpen) return\n inputRef.current.focus()\n }, [isOpen])\n\n const dispatch = useDispatch()\n const selectedTimezone = useSelector(selectTimezoneSetting)\n\n const selectedOffset = useMemo(() => {\n const { utc: timezoneHash = \"\" } = getHashParams()\n const { offset = \"\", utc = \"\" } = getTimezone(selectedTimezone, timezoneHash)\n\n if (timezoneHash !== utc) updateUtcParam(utc)\n if (selectedTimezone !== utc) dispatch(setOptionAction({ key: \"timezone\", value: utc }))\n\n dispatch(setOptionAction({ key: \"utcOffset\", value: parseFloat(offset) }))\n\n return offset\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedTimezone])\n\n const zones = useMemo(() => {\n if (!value) return timezones\n return timezones.filter(\n ({ text, offset }) =>\n text.toUpperCase().includes(value.toUpperCase()) || offset.includes(value)\n )\n }, [value])\n\n const close = () => {\n toggle(false)\n setValue(\"\")\n }\n\n const onSelect = useCallback(utc => {\n updateUtcParam(utc)\n dispatch(setOptionAction({ key: \"timezone\", value: utc }))\n close()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const onChange = useCallback(e => setValue(e.target.value), [])\n\n return (\n <Item hasBorder>\n <MenuItem round={1} onClick={toggle} ref={ref} Wrapper={Wrapper}>\n <Flex gap={1}>\n <Text color=\"textLite\" whiteSpace=\"nowrap\">\n UTC {selectedOffset}\n </Text>\n </Flex>\n <Icon name=\"chevron_down\" color=\"text\" width=\"12px\" height=\"12px\" />\n </MenuItem>\n {ref.current && isOpen && (\n <Drop\n target={ref.current}\n align={{ top: \"bottom\", left: \"left\" }}\n onEsc={close}\n onClickOutside={close}\n animation\n >\n <Dropdown>\n <Search value={value} onChange={onChange} ref={inputRef} />\n <Container>\n {zones.map(({ text, offset, utc }) => (\n <OffsetItem\n key={text}\n name={text}\n offset={offset}\n utc={utc[0]}\n onSelect={onSelect}\n />\n ))}\n </Container>\n </Dropdown>\n </Drop>\n )}\n </Item>\n )\n}\n\nexport default Timezone\n","import { useCallback, useMemo } from \"react\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { createSelector } from \"reselect\"\nimport { useLocalStorage } from \"react-use\"\nimport { showSignInModalAction } from \"domains/dashboard/actions\"\nimport { selectSignInUrl, selectRegistry } from \"domains/global/selectors\"\nimport { NETDATA_REGISTRY_SERVER } from \"utils/utils\"\n\nconst isRegistrySelector = createSelector(\n selectRegistry,\n ({ registryServer }) => registryServer === NETDATA_REGISTRY_SERVER\n)\n\nconst offlineSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ offline }) => offline\n)\n\nconst SignIn = ({ children, utmParameters }) => {\n const [hasSignedInBefore] = useLocalStorage(\"has-sign-in-history\")\n const signInUrl = useSelector(state => selectSignInUrl(utmParameters)(state))\n const isRegistry = useSelector(isRegistrySelector)\n const offline = useSelector(offlineSelector)\n\n const dispatch = useDispatch()\n\n const link = useMemo(() => {\n const { href } = window.location\n const redirectURI = encodeURIComponent(href)\n return `${signInUrl}&redirect_uri=${redirectURI}`\n }, [signInUrl])\n\n const onSignIn = useCallback(\n () =>\n dispatch(\n showSignInModalAction({\n signInLinkHref: link,\n })\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [link]\n )\n\n return useMemo(\n () =>\n typeof children === \"function\"\n ? children({ isRegistry, link, onSignIn, offline, hasSignedInBefore })\n : children,\n [children, isRegistry, link, onSignIn, offline, hasSignedInBefore]\n )\n}\n\nexport default SignIn\n","import { useEffect, useCallback, useState } from \"react\"\n\ntype IframesMessageType = \"spaces\" | \"workspaces\"\n | \"hello-from-spaces-bar\" | \"hello-from-space-panel\" | \"hello-from-sign-in\"\n | \"is-signed-in\" | \"streamed-hosts-data\" | \"has-focus\" | \"iframe-focus-change\"\n | \"synced-private-registry\" | \"set-is-logout-dropdown-opened\"\n\ninterface IframesMessage<T = unknown> {\n type: IframesMessageType\n payload: T\n}\n\n\nexport const sendToChildIframe = (\n htmlIframeElement: HTMLIFrameElement, message: IframesMessage,\n) => {\n if (htmlIframeElement.contentWindow) {\n htmlIframeElement.contentWindow.postMessage(message, \"*\")\n }\n}\n\nexport const useListenToPostMessage = <T>(\n messageType: IframesMessageType,\n callback?: (newMessage: T) => void,\n defaultState?: T | (() => T),\n): [T | undefined, () => void] => {\n const [lastMessage, setLastMessage] = useState<T | undefined>(defaultState)\n const handleMessage = useCallback((message) => {\n const data = message.data as IframesMessage<T>\n if (data.type === messageType) {\n setLastMessage(data.payload)\n if (callback) {\n callback(data.payload)\n }\n }\n }, [callback, messageType])\n const resetMesssage = useCallback(() => {\n setLastMessage(defaultState as T)\n }, [defaultState])\n useEffect(() => {\n window.addEventListener(\"message\", handleMessage)\n return () => {\n window.removeEventListener(\"message\", handleMessage)\n }\n }, [handleMessage, messageType])\n return [lastMessage, resetMesssage]\n}\n","import React, { useCallback, useEffect, useState, useRef } from \"react\"\nimport styled from \"styled-components\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\nimport { useLocalStorage } from \"react-use\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { sendToChildIframe, useListenToPostMessage } from \"utils/post-message\"\nimport { getIframeSrc, NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport { selectRegistry, selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { LOCAL_STORAGE_NEEDS_SYNC } from \"domains/dashboard/sagas\"\nimport { setOfflineAction } from \"@/src/domains/dashboard/actions\"\n\nconst IframeContainer = styled(Flex).attrs({ position: \"absolute\" })`\n display: none;\n`\nconst Iframe = ({ signedIn }) => {\n const [rendered, setRendered] = useState(false)\n const signInMsg = useRef()\n const ref = useRef()\n\n const [lsValue, , removeLsValue] = useLocalStorage(LOCAL_STORAGE_NEEDS_SYNC)\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n const registry = useSelector(selectRegistry)\n\n const dispatch = useDispatch()\n\n const { origin, pathname } = window.location\n const nameParam = encodeURIComponent(registry.hostname)\n const originParam = encodeURIComponent(origin + pathname)\n\n const signInIframeUrl = getIframeSrc(\n cloudBaseURL,\n `sign-in?id=${registry.machineGuid}&name=${nameParam}&origin=${originParam}`\n )\n\n useListenToPostMessage(\"hello-from-sign-in\", msg => {\n signInMsg.current = msg\n })\n\n const onLoad = useCallback(() => {\n setRendered(true)\n setTimeout(() => dispatch(setOfflineAction({ offline: signInMsg.current === undefined })), 500)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n const handler = e => {\n if (!e?.target) return\n if (e.target.src === signInIframeUrl && !rendered) onLoad()\n }\n\n window.addEventListener(\"DOMFrameContentLoaded\", handler)\n return () => window.removeEventListener(\"DOMFrameContentLoaded\", handler)\n }, [signInIframeUrl, rendered, onLoad])\n\n useEffect(() => {\n if (!signedIn || !ref.current) return\n if (!registry.registryServer || registry.registryServer === NETDATA_REGISTRY_SERVER) return\n if (!lsValue) return\n\n removeLsValue()\n\n const { registryMachinesArray } = registry\n if (registryMachinesArray && registryMachinesArray.length > 0) {\n sendToChildIframe(ref.current, {\n type: \"synced-private-registry\",\n payload: registryMachinesArray,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signedIn, registry, lsValue])\n\n return <IframeContainer as=\"iframe\" src={signInIframeUrl} onLoad={onLoad} />\n}\n\nexport default Iframe\n","import { useCallback, useState } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { useDispatch } from \"react-redux\"\nimport { useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { isSignedInAction } from \"@/src/domains/dashboard/actions\"\n\nconst useCheckSignInStatus = () => {\n const dispatch = useDispatch()\n const [value, setValue] = useLocalStorage(\"has-sign-in-history\")\n const [hasSignedInBefore, setHasSignedInBefore] = useState(value)\n\n const onMessage = useCallback(isNew => {\n if (isNew) {\n setHasSignedInBefore(isNew)\n setValue(isNew)\n }\n dispatch(isSignedInAction({ isSignedIn: isNew }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const [signedIn] = useListenToPostMessage(\"is-signed-in\", onMessage)\n\n return [signedIn, hasSignedInBefore]\n}\n\nexport default useCheckSignInStatus\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport SignInButton from \"components/auth/signIn\"\nimport SignInIframe from \"components/auth/signIn/iframe\"\nimport useCheckSignInStatus from \"components/auth/signIn/useCheckSignInStatus\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport Tooltip from \"@/src/components/tooltips\"\n\nconst SignIn = () => {\n const [signedIn] = useCheckSignInStatus()\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return (\n cloudEnabled && (\n <Tooltip\n content=\"Sign in to Netdata to monitor all your nodes at once, have composite charts, custom dashboards, use intelligent features and more\"\n align=\"bottom\"\n plain\n >\n <div>\n <SignInIframe signedIn={signedIn} />\n {!signedIn && (\n <SignInButton utmParameters={{ content: \"topbar\" }}>\n {({ isRegistry, link, offline, onSignIn }) => (\n <Button\n label=\"Sign in\"\n disabled={offline}\n {...(isRegistry ? { as: \"a\", href: link } : { onClick: onSignIn })}\n />\n )}\n </SignInButton>\n )}\n </div>\n </Tooltip>\n )\n )\n}\n\nexport default SignIn\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Node from \"./node\"\nimport Options from \"./options\"\nimport ProtoBuf from \"./protoBuf\"\nimport Version from \"./version\"\nimport GlobalControls from \"./globalControls\"\nimport Alarms from \"./alarms\"\nimport News from \"./news\"\nimport Timezone from \"./timezone\"\nimport SignIn from \"./signIn\"\n\nconst Wrapper = styled(Flex).attrs({\n as: \"header\",\n position: \"relative\",\n justifyContent: \"between\",\n background: \"panel\",\n zIndex: 20,\n width: \"100%\",\n padding: [2, 4, 2, 4],\n})`\n pointer-events: all;\n`\n\nconst Header = () => (\n <Wrapper>\n <Flex alignItems=\"center\" gap={3}>\n <Node />\n </Flex>\n <Flex justifyContent=\"end\" alignItems=\"center\" gap={3}>\n <Version />\n <News />\n <Options />\n <ProtoBuf />\n <Timezone />\n <GlobalControls />\n <Alarms />\n <SignIn />\n </Flex>\n </Wrapper>\n)\n\nexport default Header\n","import styled from \"styled-components\"\nimport { Button } from \"@netdata/netdata-ui\"\n\nconst ExpandButton = styled(Button)`\n&& {\n > .button-icon {\n width: 6px;\n height: 9px;\n }\n`\nexport default ExpandButton\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"@/src/utils\"\n\n\nconst SignOut = ({ flavour = \"default\", ...rest }) => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n return (\n <Flex\n alignItems=\"center\"\n as=\"iframe\"\n src={`${getIframeSrc(cloudBaseURL, \"sign-out\")}?type=${flavour}`}\n border={{ side: \"all\", size: \"0px\" }}\n width={{ max: \"128px\" }}\n height={{ max: \"40px\" }}\n {...rest}\n />\n )\n}\n\nexport default SignOut\n","import React, { useMemo } from \"react\"\nimport { ThemeProvider } from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { useToggle } from \"react-use\"\nimport { Flex, Button, DarkTheme, Text, Layer } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { MenuItem } from \"components/menus\"\nimport SignOut from \"components/auth/signOut\"\nimport SignIn from \"components/auth/signIn\"\n\nconst SignInItem = () => {\n const onClick = (e, link) => {\n e.stopPropagation()\n window.open(link, \"_blank\", \"noopener,noreferrer\")\n }\n return (\n <SignIn utmParameters={{ content: \"userSettings\"}}>\n {({ isRegistry, link, onSignIn }) => (\n <Text onClick={isRegistry ? e => onClick(e, link) : onSignIn}>\n Sign in\n </Text>\n )}\n </SignIn>\n )\n}\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn }) => isSignedIn\n)\n\nconst UserSettings = () => {\n const [isOpen, toggle] = useToggle()\n const signedIn = useSelector(isSignedInSelector)\n\n const menuItems = useMemo(\n () => [\n ...(signedIn\n ? [\n {\n children: \"Operational Status\",\n onClick: () =>\n window.open(\"https://status.netdata.cloud\", \"_blank\", \"noopener,noreferrer\"),\n },\n ]\n : []),\n ...(signedIn ? [{ separator: true }] : []),\n ...(signedIn\n ? [\n {\n children: <SignOut flavour=\"borderless\" height={{ max: \"18px\" }} />,\n },\n ]\n : [{ children: <SignInItem /> }]),\n ],\n [signedIn]\n )\n\n return (\n <ThemeProvider theme={DarkTheme}>\n <Button\n flavour=\"borderless\"\n neutral\n icon=\"user\"\n title=\"User settings\"\n name=\"userSettings\"\n onClick={toggle}\n />\n {isOpen && (\n <Layer\n position=\"bottom-left\"\n onClickOutside={toggle}\n onEsc={toggle}\n backdrop={false}\n margin={[5, 18]}\n >\n <Flex column width={52} background=\"mainBackground\" padding={[3]} round>\n {menuItems.map((item, i) => {\n if (item.separator) return <Flex height=\"1px\" background=\"disabled\" key={i} />\n return (\n <MenuItem\n key={i}\n padding={[2, 4]}\n round={1}\n {...(item.onClick && { onClick: item.onClick })}\n >\n {item.children}\n </MenuItem>\n )\n })}\n </Flex>\n </Layer>\n )}\n </ThemeProvider>\n )\n}\n\nexport default UserSettings\n","import React from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\n\nconst SpacesSkeleton = () => (\n <React.Fragment>\n <Flex\n width=\"40px\"\n height=\"40px\"\n round={2}\n border={{ side: \"all\", color: \"border\", size: \"2px\", type: \"dotted\" }}\n />\n <Flex height=\"1px\" background=\"separator\" width=\"20px\" />\n <Button icon=\"plus\" disabled />\n </React.Fragment>\n)\n\nexport default SpacesSkeleton\n","import React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"utils/utils\"\n\nconst SpacesIframe = () => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n return (\n <Flex\n as=\"iframe\"\n src={getIframeSrc(cloudBaseURL, \"space-bar\")}\n title=\"Space Bar\"\n height=\"100%\"\n width=\"100%\"\n border={{ side: \"all\", size: \"0px\" }}\n overflow=\"hidden\"\n />\n )\n}\n\nexport default SpacesIframe\n","import React from \"react\"\n\nconst NetdataLogo = ({ width, height, fill = \"#FDFDFD\" }) => (\n <svg {...{ width, height }} viewBox=\"0 0 31 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.0002 0H0.630188L8.27019 24H19.0002C25.6202 24 31.0002 18.62 31.0002 12C31.0002 5.38 25.6202 0 19.0002 0Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport default NetdataLogo\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Flex, Button, Documentation } from \"@netdata/netdata-ui\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport ExpandButton from \"./expandButton\"\nimport UserSettings from \"./userSettings\"\nimport SpacesSkeleton from \"./spacesSkeleton\"\nimport SpacesIframe from \"./spacesIframe\"\nimport NetdataLogo from \"../netdataLogo\"\n\nconst Spaces = ({ isOpen, toggle, isSignedIn }) => {\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return (\n <Flex\n column\n justifyContent=\"between\"\n background=\"panel\"\n padding={[3, 0]}\n width=\"64px\"\n alignItems=\"center\"\n gap={6}\n position=\"relative\"\n overflow=\"hidden\"\n >\n <Flex column gap={4} alignItems=\"center\" height=\"100%\" overflow=\"hidden\">\n <NetdataLogo width={32} height={32} />\n {!isOpen && (\n <ExpandButton\n icon=\"chevron_right_s\"\n onClick={toggle}\n small\n neutral\n flavour=\"borderless\"\n themeType=\"dark\"\n />\n )}\n {cloudEnabled && isSignedIn && <SpacesIframe />}\n {cloudEnabled && !isSignedIn && <SpacesSkeleton />}\n </Flex>\n <Flex column gap={4} alignItems=\"center\">\n <Documentation app=\"agent\">\n {toggle => (\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n className=\"btn\"\n icon=\"question\"\n onClick={toggle}\n title=\"Need help?\"\n />\n )}\n </Documentation>\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n className=\"btn\"\n data-toggle=\"modal\"\n data-target=\"#optionsModal\"\n icon=\"gear\"\n title=\"Settings\"\n />\n {cloudEnabled && <UserSettings />}\n </Flex>\n </Flex>\n )\n}\n\nexport default Spaces\n","// some old functions here, i don't have time to comprehend them now\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nconst naturalSortChunkify = (t: string) => {\n const tz = []\n let x = 0\n let y = -1; let n = 0 as boolean | number; let i; let j\n\n // eslint-disable-next-line no-cond-assign,no-plusplus\n while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n const m = (i >= 48 && i <= 57)\n if (m !== n) {\n // eslint-disable-next-line no-plusplus\n tz[++y] = \"\"\n n = m\n }\n tz[y] += j\n }\n\n return tz\n}\n\n\nexport const naturalSortCompare = (a: string, b: string) => {\n const aa = naturalSortChunkify(a.toLowerCase())\n const bb = naturalSortChunkify(b.toLowerCase())\n\n // eslint-disable-next-line no-plusplus\n for (let x = 0; aa[x] && bb[x]; x++) {\n if (aa[x] !== bb[x]) {\n const c = Number(aa[x]); const\n d = Number(bb[x])\n if (c.toString() === aa[x] && d.toString() === bb[x]) {\n return c - d\n }\n return (aa[x] > bb[x]) ? 1 : -1\n }\n }\n return aa.length - bb.length\n}\n\n\ninterface ObjectsWithPriority {\n [key: string]: {\n priority: number\n }\n}\nexport const sortObjectByPriority = <T extends ObjectsWithPriority>(object: T) => {\n const sorted = Object.keys(object)\n\n sorted.sort((a, b) => {\n if (object[a].priority < object[b].priority) {\n return -1\n }\n if (object[a].priority > object[b].priority) {\n return 1\n }\n return naturalSortCompare(a, b)\n })\n\n return sorted\n}\n\n\ninterface PrioritySortObject {\n name: string\n priority: number\n}\nexport const prioritySort = <T extends PrioritySortObject>(a: T, b: T) => {\n if (a.priority < b.priority) {\n return -1\n }\n if (a.priority > b.priority) {\n return 1\n }\n return naturalSortCompare(a.name, b.name)\n}\n","import { naturalSortCompare } from \"domains/dashboard/utils/sorting\"\n\nconst getBaseUrl = hostname => {\n let base = document.location.origin.toString() + decodeURI(document.location.pathname.toString())\n if (base.endsWith(`/host/${hostname}/`)) {\n base = base.substring(0, base.length - `/host/${hostname}/`.toString().length)\n }\n\n if (base.endsWith(\"/\")) {\n base = base.substring(0, base.length - 1)\n }\n\n return base\n}\n\nconst getNodeUrl = (baseUrl, hostname) => `${baseUrl}/host/${hostname}/`\n\nconst getNodes = (hosts, hostname, hostsStatus) => {\n if (!hosts || !hostname) return {}\n\n // decodeURI, because pathname (which is hostname) can contain white-spaces\n // or other characters which are URIencoded when user clicks the link\n // and we need to match it with `chartsMetadata.hostname`\n const baseUrl = getBaseUrl(hostname)\n\n const [{ hostname: parentNodeHostname }] = hosts\n\n const parentNode = {\n hostname: parentNodeHostname,\n url: `${baseUrl}/`,\n }\n\n const replicatedNodes = hosts\n .slice(1)\n .map(({ hostname }, index) => ({\n hostname,\n url: getNodeUrl(baseUrl, hostname),\n status: hostsStatus[index + 1].reachable,\n }))\n .sort((a, b) => naturalSortCompare(a.hostname, b.hostname))\n\n return {\n parentNode,\n replicatedNodes,\n }\n}\n\nexport default getNodes\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Anchor = styled(Flex).attrs({\n as: \"a\",\n gap: 2,\n alignItems: \"center\",\n})`\n & :hover {\n text-decoration: none;\n }\n`\n\nexport default Anchor\n","import React from \"react\"\nimport { Flex, Text, Icon } from \"@netdata/netdata-ui\"\nimport Pill from \"components/header/pill\"\nimport Anchor from \"./anchor\"\n\nconst Node = ({ hostname, url, status }) => {\n return (\n <Anchor href={url} justifyContent=\"between\" padding={[0, 0, 0, 2]}>\n <Flex alignItems=\"center\" gap={2}>\n <Icon name=\"node\" color=\"bright\" />\n <Text color=\"bright\" truncate>\n {hostname}\n </Text>\n </Flex>\n <Pill background={status ? \"success\" : \"border\"} color=\"bright\" round={10}>\n {status ? \"Live\" : \"Off\"}\n </Pill>\n </Anchor>\n )\n}\n\nexport default Node\n","import React, { useState, useCallback, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text, Icon, TextInput } from \"@netdata/netdata-ui\"\nimport { MenuList } from \"components/menus\"\nimport Anchor from \"./anchor\"\nimport Node from \"./node\"\n\nconst Search = styled(TextInput)`\n & > label {\n margin-bottom: 0;\n }\n`\n\nconst StyledIcon = styled(Icon)`\n transform: ${({ right }) => (right ? \"rotate(270deg)\" : \"none\")};\n`\n\nconst ReplicatedNodes = ({ parentNode, replicatedNodes }) => {\n const [listOpen, setListOpen] = useState(true)\n const [value, setValue] = useState(\"\")\n\n const toggleListOpen = useCallback(() => setListOpen(o => !o), [])\n const onChange = useCallback(e => setValue(e.target.value), [])\n\n const nodes = useMemo(() => {\n if (!value) return replicatedNodes\n return replicatedNodes.filter(({ hostname }) =>\n hostname.toLowerCase().includes(value.toLowerCase())\n )\n }, [replicatedNodes, value])\n\n return (\n <MenuList\n isOpen={listOpen}\n toggleOpen={toggleListOpen}\n label={\n <Flex alignItems=\"center\" justifyContent=\"between\">\n <Text strong color=\"border\">\n Replicated nodes\n </Text>\n <StyledIcon right={!listOpen} name=\"chevron_down\" size=\"small\" color=\"text\" />\n </Flex>\n }\n >\n <Flex column gap={4} padding={[4, 0, 0]}>\n <Anchor as=\"a\" href={parentNode.url} justifyContent=\"start\">\n <Icon name=\"nodes\" size=\"small\" color=\"bright\" />\n <Text color=\"bright\">{parentNode.hostname}</Text>\n </Anchor>\n {nodes.length >= 5 && (\n <Flex padding={[0, 0, 0, 2]}>\n <Search\n value={value}\n onChange={onChange}\n iconLeft={<Icon name=\"search_s\" size=\"small\" color=\"text\" />}\n metaShrinked\n />\n </Flex>\n )}\n <Flex column gap={2}>\n {nodes.map(({ hostname, url, status }) => (\n <Node key={hostname} hostname={hostname} url={url} status={status} />\n ))}\n </Flex>\n </Flex>\n </MenuList>\n )\n}\n\nexport default ReplicatedNodes\n","import React, { useRef, useEffect } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { sendToChildIframe, useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { getIframeSrc } from \"@/src/utils\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\n\nconst SpacePanelIframe = ({ parentNode, replicatedNodes }) => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n const ref = useRef()\n\n const [spacePanelMessage] = useListenToPostMessage(\"hello-from-space-panel\")\n\n useEffect(() => {\n if (!spacePanelMessage || !ref.current) return\n sendToChildIframe(ref.current, {\n type: \"streamed-hosts-data\",\n payload: { parentNode, replicatedNodes },\n })\n }, [replicatedNodes, parentNode, spacePanelMessage])\n\n return (\n <Flex\n ref={ref}\n as=\"iframe\"\n src={getIframeSrc(cloudBaseURL, \"space-panel\")}\n title=\"space panel\"\n width=\"100%\"\n height=\"100%\"\n border={{ side: \"all\", size: \"0px\" }}\n />\n )\n}\n\nexport default SpacePanelIframe\n","import React from \"react\"\nimport { TextSmall } from \"@netdata/netdata-ui\"\n\nconst promptContent = {\n signIn: {\n title: \"Welcome back!\",\n content: [\n <TextSmall key=\"1\" color=\"bright\">\n Sign in again to enjoy the benefits of Netdata Cloud{\" \"}\n </TextSmall>,\n ],\n },\n signUp: {\n title: \"Welcome to Netdata Cloud!\",\n content: [\n <TextSmall key=\"1\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n A single place\n </TextSmall>{\" \"}\n for all your nodes.\n </TextSmall>,\n <TextSmall key=\"2\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Multi-node dashboards\n </TextSmall>{\" \"}\n out of the box.\n </TextSmall>,\n <TextSmall key=\"3\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Custom dashboards\n </TextSmall>{\" \"}\n for you to create, edit and share online.\n </TextSmall>,\n <TextSmall key=\"4\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Metric Correlations\n </TextSmall>{\" \"}\n to find the root cause of anything.\n </TextSmall>,\n <TextSmall key=\"5\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Centrally dispatched notifications\n </TextSmall>{\" \"}\n for all alarms of all your nodes.\n </TextSmall>,\n <TextSmall key=\"6\" color=\"bright\">\n And... It is{\" \"}\n <TextSmall\n as=\"a\"\n href=\"https://www.netdata.cloud/get-netdata/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n strong\n color=\"bright\"\n >\n free, forever!\n </TextSmall>\n </TextSmall>,\n ],\n },\n}\n\nexport default promptContent\n","import React from \"react\"\nimport { Flex, Text, Button } from \"@netdata/netdata-ui\"\nimport SignIn from \"@/src/components/auth/signIn\"\nimport promptContent from \"./promptContent\"\n\nconst SignInPrompt = () => {\n return (\n <SignIn utmParameters={{ content: \"sidebar\" }}>\n {({ isRegistry, link, onSignIn, offline }) => {\n const { title, content } = promptContent[\"signIn\"]\n return (\n <Flex\n background={[\"neutral\", \"regentgrey\"]}\n column\n gap={4}\n padding={[10]}\n border={{ side: \"right\", color: \"panel\" }}\n >\n <Text color=\"bright\" strong>\n {title}\n </Text>\n {content.map(el => el)}\n <Button\n width=\"100%\"\n label=\"Sign in\"\n disabled={offline}\n {...(isRegistry ? { as: \"a\", href: link } : { onClick: onSignIn })}\n />\n </Flex>\n )\n }}\n </SignIn>\n )\n}\n\nexport default SignInPrompt\n","import React from \"react\"\n\nconst NoNetwork = () => (\n <svg width=\"68\" height=\"68\" viewBox=\"0 0 68 68\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M48.875 6.375H19.125C16.7778 6.375 14.875 8.27779 14.875 10.625V40.375C14.875 42.7222 16.7778 44.625 19.125 44.625H48.875C51.2222 44.625 53.125 42.7222 53.125 40.375V10.625C53.125 8.27779 51.2222 6.375 48.875 6.375Z\"\n fill=\"white\"\n stroke=\"#AEB3B7\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M41.0834 38.25C41.8658 38.25 42.5 38.8843 42.5 39.6667V41.0833C44.0648 41.0833 45.3334 42.3519 45.3334 43.9167V58.0833C45.3334 59.6481 44.0648 60.9167 42.5 60.9167H38.25V65.1667H31.8278V60.9167H26.9167C25.3519 60.9167 24.0834 59.6481 24.0834 58.0833V43.9167C24.0834 42.3519 25.3519 41.0833 26.9167 41.0833V39.6667C26.9167 38.8843 27.551 38.25 28.3334 38.25H41.0834Z\"\n fill=\"#35414A\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M39.7954 12.75C40.5778 12.75 41.2121 13.3843 41.2121 14.1667L41.2108 16.7294L43.9166 16.7296C44.699 16.7296 45.3333 17.3639 45.3333 18.1463V34C45.3333 34.7824 44.699 35.4167 43.9166 35.4167L43.272 35.4152L43.2727 33.3403H41.2121L41.2108 35.4152H39.151L39.1515 33.3403H37.0909L37.0897 35.4152H35.0299L35.0303 33.3403H32.9697L32.9686 35.4152H30.9088L30.909 33.3403H28.8484L28.8475 35.4152H26.7877L26.7878 33.3403H24.7272L24.7265 35.4152L24.0833 35.4167C23.3009 35.4167 22.6666 34.7824 22.6666 34V18.1463C22.6666 17.3639 23.3009 16.7296 24.0833 16.7296L26.7877 16.7294L26.7878 14.1667C26.7878 13.3843 27.4221 12.75 28.2045 12.75H39.7954Z\"\n fill=\"#35414A\"\n />\n </svg>\n)\n\nexport default NoNetwork\n","import React from \"react\"\nimport { Flex, TextNano, TextSmall } from \"@netdata/netdata-ui\"\nimport NoNetwork from \"./noNetwork\"\n\nconst OfflinePrompt = () => (\n <Flex alignItems=\"center\" background={[\"neutral\", \"regentgrey\"]} column gap={1} padding={[10]}>\n <TextSmall color=\"bright\" strong textAlign=\"center\">\n Can't connect to Netdata Cloud\n </TextSmall>\n <NoNetwork />\n <TextNano color=\"bright\" textAlign=\"center\" margin={[2, 0, 0]}>\n Maybe you are behind a firewall or you don’t have connection to the internet\n </TextNano>\n </Flex>\n)\n\nexport default OfflinePrompt\n","import React, { useCallback } from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { createSelector } from \"reselect\"\nimport { Flex, Text, TextSmall, Collapsible, Button } from \"@netdata/netdata-ui\"\nimport { selectIsUsingGlobalRegistry, selectIsCloudEnabled } from \"domains/global/selectors\"\nimport getNodes from \"./nodes\"\nimport ReplicatedNodes from \"./replicatedNodes\"\nimport SpacePanelIframe from \"./spacePanelIframe\"\nimport SignInPrompt from \"./prompts/signIn\"\nimport OfflinePrompt from \"./prompts/offline\"\n\nconst replicatedNodesSelector = createSelector(\n state => state.global.chartsMetadata.data || {},\n state => state.global.registry.fullInfoPayload.mirrored_hosts_status || {},\n ({ hosts, hostname }, hostsStatus) => getNodes(hosts, hostname, hostsStatus)\n)\n\nconst visitedNodesSelector = createSelector(\n state => state.global.registry,\n registry => registry.registryMachinesArray || []\n)\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn, offline }) => ({ isSignedIn, offline })\n)\n\nconst Space = ({ isOpen, toggle }) => {\n const { parentNode = {}, replicatedNodes = [] } = useSelector(replicatedNodesSelector)\n const visitedNodes = useSelector(visitedNodesSelector)\n const globalRegistry = useSelector(selectIsUsingGlobalRegistry)\n const { isSignedIn, offline } = useSelector(isSignedInSelector)\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n const switchIdentity = useCallback(() => window.switchRegistryModalHandler(), [])\n\n return (\n <Collapsible width={74} background=\"panel\" open={isOpen} direction=\"horizontal\" persist>\n <Flex\n flex\n column\n overflow={{ vertical: \"hidden\" }}\n margin={[3, 0, 0]}\n border={{ side: \"left\", color: \"separator\" }}\n style={{ pointerEvents: \"all\" }}\n >\n <Flex overflow={{ vertical: \"auto\" }} flex column gap={4} padding={[4]}>\n <Flex alignSelf=\"end\">\n <Button\n neutral\n flavour=\"borderless\"\n themeType=\"dark\"\n small\n icon=\"chevron_left\"\n onClick={toggle}\n />\n </Flex>\n {!isSignedIn && (\n <>\n {!!replicatedNodes.length && (\n <ReplicatedNodes parentNode={parentNode} replicatedNodes={replicatedNodes} />\n )}\n {!!visitedNodes.length && (\n <Text strong color=\"border\">\n VisitedNodes\n </Text>\n )}\n </>\n )}\n {isSignedIn && (\n <SpacePanelIframe parentNode={parentNode} replicatedNodes={replicatedNodes} />\n )}\n </Flex>\n {globalRegistry && (\n <Flex border={{ side: \"top\" }} justifyContent=\"center\" alignItems=\"center\" padding={[6]}>\n <TextSmall onClick={switchIdentity}>Switch Identity</TextSmall>\n </Flex>\n )}\n {!isSignedIn && cloudEnabled && <SignInPrompt />}\n {offline && cloudEnabled && <OfflinePrompt />}\n </Flex>\n </Collapsible>\n )\n}\n\nexport default React.memo(Space)\n","import React, { useCallback, useEffect } from \"react\"\nimport styled from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { useLocalStorage } from \"react-use\"\nimport { selectSpacePanelIsActive } from \"@/src/domains/global/selectors\"\nimport { setSpacePanelStatusAction } from \"@/src/domains/global/actions\"\nimport Spaces from \"./spaces\"\nimport Space from \"./space\"\n\nconst Wrapper = styled(Flex).attrs({ height: \"100vh\", zIndex: 10 })`\n pointer-events: all;\n`\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn }) => isSignedIn\n)\n\nconst Sidebar = () => {\n const [lsValue, setLsValue] = useLocalStorage(\"space-panel-state\")\n const isOpen = useSelector(selectSpacePanelIsActive)\n const signedIn = useSelector(isSignedInSelector)\n\n const dispatch = useDispatch()\n\n const toggle = useCallback(() => {\n dispatch(setSpacePanelStatusAction({ isActive: !isOpen }))\n setLsValue(!isOpen)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen])\n\n useEffect(() => {\n dispatch(setSpacePanelStatusAction({ isActive: lsValue ? signedIn : false }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signedIn])\n\n return (\n <Wrapper>\n <Spaces isOpen={isOpen} toggle={toggle} isSignedIn={signedIn} />\n <Space isOpen={isOpen} toggle={toggle} offline={true} />\n </Wrapper>\n )\n}\n\nexport default React.memo(Sidebar)\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Header from \"components/header\"\nimport Sidebar from \"components/sidebar\"\n\nconst Wrapper = styled(Flex).attrs({\n position: \"fixed\",\n justifyContent: \"start\",\n alignItems: \"start\",\n width: \"100%\",\n zIndex: 10,\n})`\n top: 0;\n left: 0;\n pointer-events: none;\n`\n\nconst Layout = ({ children, printMode }) => {\n\n if (printMode) return children\n\n return (\n <Wrapper>\n <Sidebar />\n <Header />\n {children}\n </Wrapper>\n )\n}\n\nexport default Layout\n","import { DefaultTheme, DarkTheme } from \"@netdata/netdata-ui\"\n\nexport type DashboardTheme = any\n\nexport const mapTheme = (theme: DashboardTheme): any =>\n ({\n slate: DarkTheme,\n white: DefaultTheme,\n }[theme] || DarkTheme)\n","import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport Ps from \"perfect-scrollbar\"\nimport { ThemeProvider } from \"styled-components\"\n\nimport '@formatjs/intl-datetimeformat/polyfill'\nimport '@formatjs/intl-datetimeformat/locale-data/en'\nimport '@formatjs/intl-datetimeformat/add-all-tz'\n\nimport \"@material/menu-surface/dist/mdc.menu-surface.css\"\n\n// intentionally loading before bootstrap styles\nimport \"./styles/main.css\"\n\n// needs to be included before bootstrap\nimport \"domains/chart/utils/jquery-loader\"\nimport \"bootstrap\"\nimport \"bootstrap-toggle\"\nimport \"bootstrap-toggle/css/bootstrap-toggle.min.css\"\n\nimport { useStore } from \"react-redux\"\nimport \"typeface-ibm-plex-sans\"\nimport \"@fortawesome/fontawesome-free/js/all\"\n\nimport \"styles/fonts.css\"\nimport { loadCss } from \"utils/css-loader\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n selectCloudBaseUrl,\n selectHasFetchedInfo,\n selectTheme,\n} from \"domains/global/selectors\"\nimport { Portals } from \"domains/chart/components/portals\"\nimport { useChartsMetadata } from \"domains/dashboard/hooks/use-charts-metadata\"\nimport { PrintModal } from \"domains/dashboard/components/print-modal\"\nimport { SidebarSocialMedia } from \"domains/dashboard/components/sidebar-social-media\"\nimport { SidebarSocialMediaPortal } from \"domains/dashboard/components/sidebar-social-media-portal\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport useAlarmFromUrl from \"domains/dashboard/hooks/useAlarmFromUrl\"\nimport { useRegistry } from \"hooks/use-registry\"\nimport { useAlarms } from \"hooks/use-alarms\"\nimport { NotificationsContainer } from \"components/notifications-container\"\n\nimport Layout from \"components/layout\"\n\nimport \"./types/global\"\n\nimport { useInfo } from \"hooks/use-info\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { mapTheme } from \"utils/map-theme\"\nimport { netdataCallback, updateLocaleFunctions } from \"./main\"\n\n// support legacy code\nwindow.Ps = Ps\n\n\nconst App: React.FC = () => {\n const store = useStore()\n useEffect(() => {\n // todo\n // @ts-ignore\n window.NETDATA.alarms = {}\n // @ts-ignore\n window.NETDATA.pause = callback => {\n callback()\n }\n netdataCallback(store)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n const [refreshHelper, setRefreshHelper] = useState<number>()\n // this is temporary, we will not need it when main.js will be fully refactored\n const haveDOMReadyForParsing = refreshHelper !== undefined\n // a workaround - each time parseDom is run, the portals are rerendered\n const parseDom = useRef(() => {\n setRefreshHelper(Math.random())\n })\n\n useEffect(() => {\n if (haveDOMReadyForParsing) {\n const loadOverlay = document.getElementById(\"loadOverlay\")\n if (loadOverlay) {\n loadOverlay.style.display = \"none\"\n }\n }\n }, [haveDOMReadyForParsing])\n\n const { localeDateString, localeTimeString } = useDateTime()\n useEffect(() => {\n updateLocaleFunctions({\n localeDateString,\n localeTimeString,\n })\n }, [localeDateString, localeTimeString])\n\n useRegistry(true)\n useAlarms(true)\n useInfo(true)\n\n const [hasFetchDependencies, setHasFetchDependencies] = useState(false)\n useLayoutEffect(() => {\n Promise.all([\n loadCss(serverStatic + window.NETDATA.themes.current.bootstrap_css),\n loadCss(serverStatic + window.NETDATA.themes.current.dashboard_css),\n ]).then(() => {\n setHasFetchDependencies(true)\n })\n }, [])\n\n const chartsMetadata = useChartsMetadata()\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n // @ts-ignore\n window.NETDATA.parseDom = parseDom.current\n\n const hasFetchedInfo = useSelector(selectHasFetchedInfo)\n const theme = useSelector(selectTheme)\n useAlarmFromUrl()\n\n\n return (\n <ThemeProvider theme={mapTheme(theme)}>\n {hasFetchDependencies && (\n // this needs to render after dynamic css files are loaded, otherwise netdata-ui\n // styling will have smaller priority than bootstrap css\n <NotificationsContainer />\n )}\n {chartsMetadata && cloudBaseURL && hasFetchedInfo && haveDOMReadyForParsing && (\n <Layout printMode={isPrintMode}>\n {hasFetchDependencies && (\n <>\n <Portals key={refreshHelper} />\n <SidebarSocialMediaPortal>\n <SidebarSocialMedia />\n </SidebarSocialMediaPortal>\n {isPrintMode && <PrintModal />}\n </>\n )}\n </Layout>\n )}\n </ThemeProvider>\n )\n}\n\nexport default App\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { fetchHelloAction } from \"domains/global/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useRegistry = (shouldUseRegistry: boolean) => {\n const registry = useSelector(selectRegistry)\n\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseRegistry && !registry.isFetchingHello && !registry.hasFetchedHello\n && !registry.isHelloCallError\n ) {\n dispatch(fetchHelloAction.request({\n serverDefault,\n }))\n }\n }, [dispatch, registry, shouldUseRegistry])\n}\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { startAlarmsAction } from \"domains/global/actions\"\nimport { selectHasStartedAlarms } from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\n\nexport const useAlarms = (shouldUseAlarms: boolean) => {\n const hasStartedAlarms = useSelector(selectHasStartedAlarms)\n\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseAlarms && !hasStartedAlarms) {\n dispatch(startAlarmsAction({\n serverDefault,\n }))\n }\n }, [dispatch, hasStartedAlarms, shouldUseAlarms])\n}\n","import { useEffect } from \"react\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useInfo = (shouldUseInfo: boolean) => {\n const registry = useSelector(selectRegistry)\n const hasStartedInfo = registry?.hasStartedInfo || false\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseInfo && !hasStartedInfo) {\n dispatch(fetchInfoAction.request({\n poll: false,\n }))\n }\n }, [dispatch, hasStartedInfo, shouldUseInfo])\n}\n","import { useHttp } from \"hooks/use-http\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { ChartsMetadata } from \"domains/global/types\"\n\nexport const useChartsMetadata = () => {\n const [chartsMetadata] = useHttp<ChartsMetadata>(`${serverDefault}api/v1/charts`)\n return chartsMetadata\n}\n","import { useMount } from \"react-use\"\n\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { getHashParams } from \"utils/hash-utils\"\nimport { setAlarmAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { alarmStatuses } from \"domains/global/constants\"\n\nexport default () => {\n const dispatch = useDispatch()\n useMount(() => {\n const params = getHashParams()\n const alarmWhen = params[\"alarm_when\"]\n if (alarmWhen) {\n const alarmTime = Number(alarmWhen)\n\n const alarmStatus = params[\"alarm_status\"]\n const alarmChart = params[\"alarm_chart\"]\n const alarmValue = params[\"alarm_value\"]\n if (!alarmStatuses.includes(alarmStatus) || !alarmChart || !alarmValue) {\n return\n }\n\n dispatch(setAlarmAction({\n alarm: {\n chartId: alarmChart,\n status: alarmStatus,\n value: alarmValue,\n when: alarmTime,\n },\n }))\n const PADDING = 1000 * 60 * 5\n dispatch(setGlobalPanAndZoomAction({\n after: alarmTime * 1000 - PADDING,\n before: alarmTime * 1000 + PADDING,\n }))\n }\n })\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\n\nimport { store } from \"store\"\n\n// resolved in craco.config\n// @ts-ignore\nimport App from \"App\"\n\nimport \"./index.css\"\n\n// todo for static-dashboard:\n// 1) wait for the whole page to load, then render\n// 2) when the whole page is loaded, check window.NETDATA.options set by user and override initial\n// options settings\n\nReactDOM.render(\n <Provider store={store}>\n <App />\n </Provider>,\n document.getElementById(\"root\")\n)\n","/*! @license Copyright 2017 Dan Vanderkam (danvdk@gmail.com) MIT-licensed (http://opensource.org/licenses/MIT) */\n// SPDX-License-Identifier: MIT\n!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.Dygraph=t()}}(function(){return function t(e,a,i){function n(o,s){if(!a[o]){if(!e[o]){var l=\"function\"==typeof require&&require;if(!s&&l)return l(o,!0);if(r)return r(o,!0);var h=new Error(\"Cannot find module '\"+o+\"'\");throw h.code=\"MODULE_NOT_FOUND\",h}var u=a[o]={exports:{}};e[o][0].call(u.exports,function(t){var a=e[o][1][t];return n(a||t)},u,u.exports,t,e,a,i)}return a[o].exports}for(var r=\"function\"==typeof require&&require,o=0;o<i.length;o++)n(i[o]);return n}({1:[function(t,e,a){function i(){throw new Error(\"setTimeout has not been defined\")}function n(){throw new Error(\"clearTimeout has not been defined\")}function r(t){if(d===setTimeout)return setTimeout(t,0);if((d===i||!d)&&setTimeout)return d=setTimeout,setTimeout(t,0);try{return d(t,0)}catch(e){try{return d.call(null,t,0)}catch(e){return d.call(this,t,0)}}}function o(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function s(){v&&g&&(v=!1,g.length?f=g.concat(f):_=-1,f.length&&l())}function l(){if(!v){var t=r(s);v=!0;for(var e=f.length;e;){for(g=f,f=[];++_<e;)g&&g[_].run();_=-1,e=f.length}g=null,v=!1,o(t)}}function h(t,e){this.fun=t,this.array=e}function u(){}var d,c,p=e.exports={};!function(){try{d=\"function\"==typeof setTimeout?setTimeout:i}catch(t){d=i}try{c=\"function\"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var g,f=[],v=!1,_=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var a=1;a<arguments.length;a++)e[a-1]=arguments[a];f.push(new h(t,e)),1!==f.length||v||r(l)},h.prototype.run=function(){this.fun.apply(null,this.array)},p.title=\"browser\",p.browser=!0,p.env={},p.argv=[],p.version=\"\",p.versions={},p.on=u,p.addListener=u,p.once=u,p.off=u,p.removeListener=u,p.removeAllListeners=u,p.emit=u,p.prependListener=u,p.prependOnceListener=u,p.listeners=function(t){return[]},p.binding=function(t){throw new Error(\"process.binding is not supported\")},p.cwd=function(){return\"/\"},p.chdir=function(t){throw new Error(\"process.chdir is not supported\")},p.umask=function(){return 0}},{}],2:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o=[],s=a.get(\"logscale\"),l=0;l<t.length;l++)i=t[l][0],r=t[l][e],s&&null!==r&&(r[0]<=0||r[1]<=0||r[2]<=0)&&(r=null),null!==r?(n=r[1],null===n||isNaN(n)?o.push([i,n,[n,n]]):o.push([i,n,[r[0],r[2]]])):o.push([i,null,[null,null]]);return o},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l,h,u=[];for(n=0,o=0,r=0,s=0,l=0;l<t.length;l++){if(i=t[l][1],h=t[l][2],u[l]=t[l],null===i||isNaN(i)||(n+=h[0],o+=i,r+=h[1],s+=1),l-e>=0){var d=t[l-e];null===d[1]||isNaN(d[1])||(n-=d[2][0],o-=d[1],r-=d[2][1],s-=1)}u[l]=s?[t[l][0],1*o/s,[1*n/s,1*r/s]]:[t[l][0],null,[null,null]]}return u},a.default=r,e.exports=a.default},{\"./bars\":5}],3:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s=[],l=a.get(\"sigma\"),h=a.get(\"logscale\"),u=0;u<t.length;u++)i=t[u][0],o=t[u][e],h&&null!==o&&(o[0]<=0||o[0]-l*o[1]<=0)&&(o=null),null!==o?(n=o[0],null===n||isNaN(n)?s.push([i,n,[n,n,n]]):(r=l*o[1],s.push([i,n,[n-r,n+r,o[1]]]))):s.push([i,null,[null,null,null]]);return s},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l,h,u,d,c=[],p=a.get(\"sigma\");for(i=0;i<t.length;i++){for(s=0,u=0,l=0,n=Math.max(0,i-e+1);n<i+1;n++)null===(r=t[n][1])||isNaN(r)||(l++,s+=r,u+=Math.pow(t[n][2][2],2));l?(h=Math.sqrt(u)/l,d=s/l,c[i]=[t[i][0],d,[d-p*h,d+p*h]]):(o=1==e?t[i][1]:null,c[i]=[t[i][0],o,[o,o]])}return c},a.default=r,e.exports=a.default},{\"./bars\":5}],4:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./bars\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s,l,h,u,d=[],c=a.get(\"sigma\"),p=a.get(\"logscale\"),g=0;g<t.length;g++)i=t[g][0],r=t[g][e],p&&null!==r&&(r[0]<=0||r[1]<=0)&&(r=null),null!==r?(o=r[0],s=r[1],null===o||isNaN(o)?d.push([i,o,[o,o,o,s]]):(l=s?o/s:0,h=s?c*Math.sqrt(l*(1-l)/s):1,u=100*h,n=100*l,d.push([i,n,[n-u,n+u,o,s]]))):d.push([i,null,[null,null,null,null]]);return d},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s=[],l=a.get(\"sigma\"),h=a.get(\"wilsonInterval\"),u=0,d=0;for(r=0;r<t.length;r++){u+=t[r][2][2],d+=t[r][2][3],r-e>=0&&(u-=t[r-e][2][2],d-=t[r-e][2][3]);var c=t[r][0],p=d?u/d:0;if(h)if(d){var g=p<0?0:p,f=d,v=l*Math.sqrt(g*(1-g)/f+l*l/(4*f*f)),_=1+l*l/d;i=(g+l*l/(2*d)-v)/_,n=(g+l*l/(2*d)+v)/_,s[r]=[c,100*g,[100*i,100*n]]}else s[r]=[c,0,[0,0]];else o=d?l*Math.sqrt(p*(1-p)/d):1,s[r]=[c,100*p,[100*(p-o),100*(p+o)]]}return s},a.default=r,e.exports=a.default},{\"./bars\":5}],5:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./datahandler\"),r=i(n),o=t(\"../dygraph-layout\"),s=i(o),l=function(){r.default.call(this)};l.prototype=new r.default,l.prototype.extractSeries=function(t,e,a){},l.prototype.rollingAverage=function(t,e,a){},l.prototype.onPointsCreated_=function(t,e){for(var a=0;a<t.length;++a){var i=t[a],n=e[a];n.y_top=NaN,n.y_bottom=NaN,n.yval_minus=r.default.parseFloat(i[2][0]),n.yval_plus=r.default.parseFloat(i[2][1])}},l.prototype.getExtremeYValues=function(t,e,a){for(var i,n=null,r=null,o=t.length-1,s=0;s<=o;s++)if(null!==(i=t[s][1])&&!isNaN(i)){var l=t[s][2][0],h=t[s][2][1];l>i&&(l=i),h<i&&(h=i),(null===r||h>r)&&(r=h),(null===n||l<n)&&(n=l)}return[n,r]},l.prototype.onLineEvaluated=function(t,e,a){for(var i,n=0;n<t.length;n++)i=t[n],i.y_top=s.default.calcYNormal_(e,i.yval_minus,a),i.y_bottom=s.default.calcYNormal_(e,i.yval_plus,a)},a.default=l,e.exports=a.default},{\"../dygraph-layout\":13,\"./datahandler\":6}],6:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){},n=i;n.X=0,n.Y=1,n.EXTRAS=2,n.prototype.extractSeries=function(t,e,a){},n.prototype.seriesToPoints=function(t,e,a){for(var i=[],r=0;r<t.length;++r){var o=t[r],s=o[1],l=null===s?null:n.parseFloat(s),h={x:NaN,y:NaN,xval:n.parseFloat(o[0]),yval:l,name:e,idx:r+a,canvasx:NaN,canvasy:NaN};i.push(h)}return this.onPointsCreated_(t,i),i},n.prototype.onPointsCreated_=function(t,e){},n.prototype.rollingAverage=function(t,e,a){},n.prototype.getExtremeYValues=function(t,e,a){},n.prototype.onLineEvaluated=function(t,e,a){},n.parseFloat=function(t){return null===t?NaN:t},a.default=i,e.exports=a.default},{}],7:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./datahandler\"),r=(i(n),t(\"./default\")),o=i(r),s=function(){};s.prototype=new o.default,s.prototype.extractSeries=function(t,e,a){for(var i,n,r,o,s,l,h=[],u=a.get(\"logscale\"),d=0;d<t.length;d++)i=t[d][0],r=t[d][e],u&&null!==r&&(r[0]<=0||r[1]<=0)&&(r=null),null!==r?(o=r[0],s=r[1],null===o||isNaN(o)?h.push([i,o,[o,s]]):(l=s?o/s:0,n=100*l,h.push([i,n,[o,s]]))):h.push([i,null,[null,null]]);return h},s.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n=[],r=0,o=0;for(i=0;i<t.length;i++){r+=t[i][2][0],o+=t[i][2][1],i-e>=0&&(r-=t[i-e][2][0],o-=t[i-e][2][1]);var s=t[i][0],l=o?r/o:0;n[i]=[s,100*l]}return n},a.default=s,e.exports=a.default},{\"./datahandler\":6,\"./default\":8}],8:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./datahandler\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(){};r.prototype=new n.default,r.prototype.extractSeries=function(t,e,a){for(var i=[],n=a.get(\"logscale\"),r=0;r<t.length;r++){var o=t[r][0],s=t[r][e];n&&s<=0&&(s=null),i.push([o,s])}return i},r.prototype.rollingAverage=function(t,e,a){e=Math.min(e,t.length);var i,n,r,o,s,l=[];if(1==e)return t;for(i=0;i<t.length;i++){for(o=0,s=0,n=Math.max(0,i-e+1);n<i+1;n++)null===(r=t[n][1])||isNaN(r)||(s++,o+=t[n][1]);l[i]=s?[t[i][0],o/s]:[t[i][0],null]}return l},r.prototype.getExtremeYValues=function(t,e,a){for(var i,n=null,r=null,o=t.length-1,s=0;s<=o;s++)null===(i=t[s][1])||isNaN(i)||((null===r||i>r)&&(r=i),(null===n||i<n)&&(n=i));return[n,r]},a.default=r,e.exports=a.default},{\"./datahandler\":6}],9:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=t(\"./dygraph\"),o=function(t){return t&&t.__esModule?t:{default:t}}(r),s=function(t,e,a,i){if(this.dygraph_=t,this.layout=i,this.element=e,this.elementContext=a,this.height=t.height_,this.width=t.width_,!n.isCanvasSupported(this.element))throw\"Canvas is not supported.\";this.area=i.getPlotArea();var r=this.dygraph_.canvas_ctx_;r.beginPath(),r.rect(this.area.x,this.area.y,this.area.w,this.area.h),r.clip(),r=this.dygraph_.hidden_ctx_,r.beginPath(),r.rect(this.area.x,this.area.y,this.area.w,this.area.h),r.clip()};s.prototype.clear=function(){this.elementContext.clearRect(0,0,this.width,this.height)},s.prototype.render=function(){this._updatePoints(),this._renderLineChart()},s._getIteratorPredicate=function(t){return t?s._predicateThatSkipsEmptyPoints:null},s._predicateThatSkipsEmptyPoints=function(t,e){return null!==t[e].yval},s._drawStyledLine=function(t,e,a,i,r,o,l){var h=t.dygraph,u=h.getBooleanOption(\"stepPlot\",t.setName);n.isArrayLike(i)||(i=null);var d=h.getBooleanOption(\"drawGapEdgePoints\",t.setName),c=t.points,p=t.setName,g=n.createIterator(c,0,c.length,s._getIteratorPredicate(h.getBooleanOption(\"connectSeparatedPoints\",p))),f=i&&i.length>=2,v=t.drawingContext;v.save(),f&&v.setLineDash&&v.setLineDash(i);var _=s._drawSeries(t,g,a,l,r,d,u,e);s._drawPointsOnLine(t,_,o,e,l),f&&v.setLineDash&&v.setLineDash([]),v.restore()},s._drawSeries=function(t,e,a,i,n,r,o,s){var l,h,u=null,d=null,c=null,p=[],g=!0,f=t.drawingContext;f.beginPath(),f.strokeStyle=s,f.lineWidth=a;for(var v=e.array_,_=e.end_,y=e.predicate_,x=e.start_;x<_;x++){if(h=v[x],y){for(;x<_&&!y(v,x);)x++;if(x==_)break;h=v[x]}if(null===h.canvasy||h.canvasy!=h.canvasy)o&&null!==u&&(f.moveTo(u,d),f.lineTo(h.canvasx,d)),u=d=null;else{if(l=!1,r||null===u){e.nextIdx_=x,e.next(),c=e.hasNext?e.peek.canvasy:null;var m=null===c||c!=c;l=null===u&&m,r&&(!g&&null===u||e.hasNext&&m)&&(l=!0)}null!==u?a&&(o&&(f.moveTo(u,d),f.lineTo(h.canvasx,d)),f.lineTo(h.canvasx,h.canvasy)):f.moveTo(h.canvasx,h.canvasy),(n||l)&&p.push([h.canvasx,h.canvasy,h.idx]),u=h.canvasx,d=h.canvasy}g=!1}return f.stroke(),p},s._drawPointsOnLine=function(t,e,a,i,n){for(var r=t.drawingContext,o=0;o<e.length;o++){var s=e[o];r.save(),a.call(t.dygraph,t.dygraph,t.setName,r,s[0],s[1],i,n,s[2]),r.restore()}},s.prototype._updatePoints=function(){for(var t=this.layout.points,e=t.length;e--;)for(var a=t[e],i=a.length;i--;){var n=a[i];n.canvasx=this.area.w*n.x+this.area.x,n.canvasy=this.area.h*n.y+this.area.y}},s.prototype._renderLineChart=function(t,e){var a,i,r=e||this.elementContext,o=this.layout.points,s=this.layout.setNames;this.colors=this.dygraph_.colorsMap_;var l=this.dygraph_.getOption(\"plotter\"),h=l;n.isArrayLike(h)||(h=[h]);var u={};for(a=0;a<s.length;a++){i=s[a];var d=this.dygraph_.getOption(\"plotter\",i);d!=l&&(u[i]=d)}for(a=0;a<h.length;a++)for(var c=h[a],p=a==h.length-1,g=0;g<o.length;g++)if(i=s[g],!t||i==t){var f=o[g],v=c;if(i in u){if(!p)continue;v=u[i]}var _=this.colors[i],y=this.dygraph_.getOption(\"strokeWidth\",i);r.save(),r.strokeStyle=_,r.lineWidth=y,v({points:f,setName:i,drawingContext:r,color:_,strokeWidth:y,dygraph:this.dygraph_,axis:this.dygraph_.axisPropertiesForSeries(i),plotArea:this.area,seriesIndex:g,seriesCount:o.length,singleSeriesName:t,allSeriesPoints:o}),r.restore()}},s._Plotters={linePlotter:function(t){s._linePlotter(t)},fillPlotter:function(t){s._fillPlotter(t)},errorPlotter:function(t){s._errorPlotter(t)}},s._linePlotter=function(t){var e=t.dygraph,a=t.setName,i=t.strokeWidth,r=e.getNumericOption(\"strokeBorderWidth\",a),o=e.getOption(\"drawPointCallback\",a)||n.Circles.DEFAULT,l=e.getOption(\"strokePattern\",a),h=e.getBooleanOption(\"drawPoints\",a),u=e.getNumericOption(\"pointSize\",a);r&&i&&s._drawStyledLine(t,e.getOption(\"strokeBorderColor\",a),i+2*r,l,h,o,u),s._drawStyledLine(t,t.color,i,l,h,o,u)},s._errorPlotter=function(t){var e=t.dygraph,a=t.setName;if(e.getBooleanOption(\"errorBars\")||e.getBooleanOption(\"customBars\")){e.getBooleanOption(\"fillGraph\",a)&&console.warn(\"Can't use fillGraph option with error bars\");var i,r=t.drawingContext,o=t.color,l=e.getNumericOption(\"fillAlpha\",a),h=e.getBooleanOption(\"stepPlot\",a),u=t.points,d=n.createIterator(u,0,u.length,s._getIteratorPredicate(e.getBooleanOption(\"connectSeparatedPoints\",a))),c=NaN,p=NaN,g=[-1,-1],f=n.toRGB_(o),v=\"rgba(\"+f.r+\",\"+f.g+\",\"+f.b+\",\"+l+\")\";r.fillStyle=v,r.beginPath();for(var _=function(t){return null===t||void 0===t||isNaN(t)};d.hasNext;){var y=d.next();!h&&_(y.y)||h&&!isNaN(p)&&_(p)?c=NaN:(i=[y.y_bottom,y.y_top],h&&(p=y.y),isNaN(i[0])&&(i[0]=y.y),isNaN(i[1])&&(i[1]=y.y),i[0]=t.plotArea.h*i[0]+t.plotArea.y,i[1]=t.plotArea.h*i[1]+t.plotArea.y,isNaN(c)||(h?(r.moveTo(c,g[0]),r.lineTo(y.canvasx,g[0]),r.lineTo(y.canvasx,g[1])):(r.moveTo(c,g[0]),r.lineTo(y.canvasx,i[0]),r.lineTo(y.canvasx,i[1])),r.lineTo(c,g[1]),r.closePath()),g=i,c=y.canvasx)}r.fill()}},s._fastCanvasProxy=function(t){var e=[],a=null,i=null,n=0,r=function(t){if(!(e.length<=1)){for(var a=e.length-1;a>0;a--){var i=e[a];if(2==i[0]){var n=e[a-1];n[1]==i[1]&&n[2]==i[2]&&e.splice(a,1)}}for(var a=0;a<e.length-1;){var i=e[a];2==i[0]&&2==e[a+1][0]?e.splice(a,1):a++}if(e.length>2&&!t){var r=0;2==e[0][0]&&r++;for(var o=null,s=null,a=r;a<e.length;a++){var i=e[a];if(1==i[0])if(null===o&&null===s)o=a,s=a;else{var l=i[2];l<e[o][2]?o=a:l>e[s][2]&&(s=a)}}var h=e[o],u=e[s];e.splice(r,e.length-r),o<s?(e.push(h),e.push(u)):o>s?(e.push(u),e.push(h)):e.push(h)}}},o=function(a){r(a);for(var o=0,s=e.length;o<s;o++){var l=e[o];1==l[0]?t.lineTo(l[1],l[2]):2==l[0]&&t.moveTo(l[1],l[2])}e.length&&(i=e[e.length-1][1]),n+=e.length,e=[]},s=function(t,n,r){var s=Math.round(n);if(null===a||s!=a){var l=a-i>1,h=s-a>1;o(l||h),a=s}e.push([t,n,r])};return{moveTo:function(t,e){s(2,t,e)},lineTo:function(t,e){s(1,t,e)},stroke:function(){o(!0),t.stroke()},fill:function(){o(!0),t.fill()},beginPath:function(){o(!0),t.beginPath()},closePath:function(){o(!0),t.closePath()},_count:function(){return n}}},s._fillPlotter=function(t){if(!t.singleSeriesName&&0===t.seriesIndex){for(var e=t.dygraph,a=e.getLabels().slice(1),i=a.length;i>=0;i--)e.visibility()[i]||a.splice(i,1);if(function(){for(var t=0;t<a.length;t++)if(e.getBooleanOption(\"fillGraph\",a[t]))return!0;return!1}())for(var r,l,h=t.plotArea,u=t.allSeriesPoints,d=u.length,c=e.getBooleanOption(\"stackedGraph\"),p=e.getColors(),g={},f=function(t,e,a,i){if(t.lineTo(e,a),c)for(var n=i.length-1;n>=0;n--){var r=i[n];t.lineTo(r[0],r[1])}},v=d-1;v>=0;v--){var _=t.drawingContext,y=a[v];if(e.getBooleanOption(\"fillGraph\",y)){var x=e.getNumericOption(\"fillAlpha\",y),m=e.getBooleanOption(\"stepPlot\",y),b=p[v],w=e.axisPropertiesForSeries(y),A=1+w.minyval*w.yscale;A<0?A=0:A>1&&(A=1),A=h.h*A+h.y;var O,D=u[v],E=n.createIterator(D,0,D.length,s._getIteratorPredicate(e.getBooleanOption(\"connectSeparatedPoints\",y))),L=NaN,T=[-1,-1],S=n.toRGB_(b),P=\"rgba(\"+S.r+\",\"+S.g+\",\"+S.b+\",\"+x+\")\";_.fillStyle=P,_.beginPath();var C,M=!0;(D.length>2*e.width_||o.default.FORCE_FAST_PROXY)&&(_=s._fastCanvasProxy(_));for(var N,F=[];E.hasNext;)if(N=E.next(),n.isOK(N.y)||m){if(c){if(!M&&C==N.xval)continue;M=!1,C=N.xval,r=g[N.canvasx];var k;k=void 0===r?A:l?r[0]:r,O=[N.canvasy,k],m?-1===T[0]?g[N.canvasx]=[N.canvasy,A]:g[N.canvasx]=[N.canvasy,T[0]]:g[N.canvasx]=N.canvasy}else O=isNaN(N.canvasy)&&m?[h.y+h.h,A]:[N.canvasy,A];isNaN(L)?(_.moveTo(N.canvasx,O[1]),_.lineTo(N.canvasx,O[0])):(m?(_.lineTo(N.canvasx,T[0]),_.lineTo(N.canvasx,O[0])):_.lineTo(N.canvasx,O[0]),c&&(F.push([L,T[1]]),l&&r?F.push([N.canvasx,r[1]]):F.push([N.canvasx,O[1]]))),T=O,L=N.canvasx}else f(_,L,T[1],F),F=[],L=NaN,null===N.y_stacked||isNaN(N.y_stacked)||(g[N.canvasx]=h.h*N.y_stacked+h.y);l=m,O&&N&&(f(_,N.canvasx,O[1],F),F=[]),_.fill()}}}},a.default=s,e.exports=a.default},{\"./dygraph\":18,\"./dygraph-utils\":17}],10:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}Object.defineProperty(a,\"__esModule\",{value:!0});var r=t(\"./dygraph-tickers\"),o=n(r),s=t(\"./dygraph-interaction-model\"),l=i(s),h=t(\"./dygraph-canvas\"),u=i(h),d=t(\"./dygraph-utils\"),c=n(d),p={highlightCircleSize:3,highlightSeriesOpts:null,highlightSeriesBackgroundAlpha:.5,highlightSeriesBackgroundColor:\"rgb(255, 255, 255)\",labelsSeparateLines:!1,labelsShowZeroValues:!0,labelsKMB:!1,labelsKMG2:!1,showLabelsOnHighlight:!0,digitsAfterDecimal:2,maxNumberWidth:6,sigFigs:null,strokeWidth:1,strokeBorderWidth:0,strokeBorderColor:\"white\",axisTickSize:3,axisLabelFontSize:14,rightGap:5,showRoller:!1,xValueParser:void 0,delimiter:\",\",sigma:2,errorBars:!1,fractions:!1,wilsonInterval:!0,customBars:!1,fillGraph:!1,fillAlpha:.15,connectSeparatedPoints:!1,stackedGraph:!1,stackedGraphNaNFill:\"all\",hideOverlayOnMouseOut:!0,legend:\"onmouseover\",stepPlot:!1,xRangePad:0,yRangePad:null,drawAxesAtZero:!1,titleHeight:28,xLabelHeight:18,yLabelWidth:18,axisLineColor:\"black\",axisLineWidth:.3,gridLineWidth:.3,axisLabelWidth:50,gridLineColor:\"rgb(128,128,128)\",interactionModel:l.default.defaultModel,animatedZooms:!1,showRangeSelector:!1,rangeSelectorHeight:40,rangeSelectorPlotStrokeColor:\"#808FAB\",rangeSelectorPlotFillGradientColor:\"white\",rangeSelectorPlotFillColor:\"#A7B1C4\",rangeSelectorBackgroundStrokeColor:\"gray\",rangeSelectorBackgroundLineWidth:1,rangeSelectorPlotLineWidth:1.5,rangeSelectorForegroundStrokeColor:\"black\",rangeSelectorForegroundLineWidth:1,rangeSelectorAlpha:.6,showInRangeSelector:null,plotter:[u.default._fillPlotter,u.default._errorPlotter,u.default._linePlotter],plugins:[],axes:{x:{pixelsPerLabel:70,axisLabelWidth:60,axisLabelFormatter:c.dateAxisLabelFormatter,valueFormatter:c.dateValueFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:o.dateTicker},y:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:c.numberValueFormatter,axisLabelFormatter:c.numberAxisLabelFormatter,drawGrid:!0,drawAxis:!0,independentTicks:!0,ticker:o.numericTicks},y2:{axisLabelWidth:50,pixelsPerLabel:30,valueFormatter:c.numberValueFormatter,axisLabelFormatter:c.numberAxisLabelFormatter,drawAxis:!0,drawGrid:!1,independentTicks:!1,ticker:o.numericTicks}}};a.default=p,e.exports=a.default},{\"./dygraph-canvas\":9,\"./dygraph-interaction-model\":12,\"./dygraph-tickers\":16,\"./dygraph-utils\":17}],11:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph\"),n=function(t){return t&&t.__esModule?t:{default:t}}(i),r=function(t){this.container=t};r.prototype.draw=function(t,e){this.container.innerHTML=\"\",void 0!==this.date_graph&&this.date_graph.destroy(),this.date_graph=new n.default(this.container,t,e)},r.prototype.setSelection=function(t){var e=!1;t.length&&(e=t[0].row),this.date_graph.setSelection(e)},r.prototype.getSelection=function(){var t=[],e=this.date_graph.getSelection();if(e<0)return t;for(var a=this.date_graph.layout_.points,i=0;i<a.length;++i)t.push({row:e,column:i+1});return t},a.default=r,e.exports=a.default},{\"./dygraph\":18}],12:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r={};r.maybeTreatMouseOpAsClick=function(t,e,a){a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=Math.abs(a.dragEndX-a.dragStartX),o=Math.abs(a.dragEndY-a.dragStartY);i<2&&o<2&&void 0!==e.lastx_&&-1!=e.lastx_&&r.treatMouseOpAsClick(e,t,a),a.regionWidth=i,a.regionHeight=o},r.startPan=function(t,e,a){var i,r;a.isPanning=!0;var o=e.xAxisRange();if(e.getOptionForAxis(\"logscale\",\"x\")?(a.initialLeftmostDate=n.log10(o[0]),a.dateRange=n.log10(o[1])-n.log10(o[0])):(a.initialLeftmostDate=o[0],a.dateRange=o[1]-o[0]),a.xUnitsPerPixel=a.dateRange/(e.plotter_.area.w-1),e.getNumericOption(\"panEdgeFraction\")){var s=e.width_*e.getNumericOption(\"panEdgeFraction\"),l=e.xAxisExtremes(),h=e.toDomXCoord(l[0])-s,u=e.toDomXCoord(l[1])+s,d=e.toDataXCoord(h),c=e.toDataXCoord(u);a.boundedDates=[d,c];var p=[],g=e.height_*e.getNumericOption(\"panEdgeFraction\");for(i=0;i<e.axes_.length;i++){r=e.axes_[i];var f=r.extremeRange,v=e.toDomYCoord(f[0],i)+g,_=e.toDomYCoord(f[1],i)-g,y=e.toDataYCoord(v,i),x=e.toDataYCoord(_,i);p[i]=[y,x]}a.boundedValues=p}for(a.is2DPan=!1,a.axes=[],i=0;i<e.axes_.length;i++){r=e.axes_[i];var m={},b=e.yAxisRange(i);e.attributes_.getForAxis(\"logscale\",i)?(m.initialTopValue=n.log10(b[1]),m.dragValueRange=n.log10(b[1])-n.log10(b[0])):(m.initialTopValue=b[1],m.dragValueRange=b[1]-b[0]),m.unitsPerPixel=m.dragValueRange/(e.plotter_.area.h-1),a.axes.push(m),r.valueRange&&(a.is2DPan=!0)}},r.movePan=function(t,e,a){a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=a.initialLeftmostDate-(a.dragEndX-a.dragStartX)*a.xUnitsPerPixel;a.boundedDates&&(i=Math.max(i,a.boundedDates[0]));var r=i+a.dateRange;if(a.boundedDates&&r>a.boundedDates[1]&&(i-=r-a.boundedDates[1],r=i+a.dateRange),e.getOptionForAxis(\"logscale\",\"x\")?e.dateWindow_=[Math.pow(n.LOG_SCALE,i),Math.pow(n.LOG_SCALE,r)]:e.dateWindow_=[i,r],a.is2DPan)for(var o=a.dragEndY-a.dragStartY,s=0;s<e.axes_.length;s++){var l=e.axes_[s],h=a.axes[s],u=o*h.unitsPerPixel,d=a.boundedValues?a.boundedValues[s]:null,c=h.initialTopValue+u;d&&(c=Math.min(c,d[1]));var p=c-h.dragValueRange;d&&p<d[0]&&(c-=p-d[0],p=c-h.dragValueRange),e.attributes_.getForAxis(\"logscale\",s)?l.valueRange=[Math.pow(n.LOG_SCALE,p),Math.pow(n.LOG_SCALE,c)]:l.valueRange=[p,c]}e.drawGraph_(!1)},r.endPan=r.maybeTreatMouseOpAsClick,r.startZoom=function(t,e,a){a.isZooming=!0,a.zoomMoved=!1},r.moveZoom=function(t,e,a){a.zoomMoved=!0,a.dragEndX=n.dragGetX_(t,a),a.dragEndY=n.dragGetY_(t,a);var i=Math.abs(a.dragStartX-a.dragEndX),r=Math.abs(a.dragStartY-a.dragEndY);a.dragDirection=i<r/2?n.VERTICAL:n.HORIZONTAL,e.drawZoomRect_(a.dragDirection,a.dragStartX,a.dragEndX,a.dragStartY,a.dragEndY,a.prevDragDirection,a.prevEndX,a.prevEndY),a.prevEndX=a.dragEndX,a.prevEndY=a.dragEndY,a.prevDragDirection=a.dragDirection},r.treatMouseOpAsClick=function(t,e,a){for(var i=t.getFunctionOption(\"clickCallback\"),n=t.getFunctionOption(\"pointClickCallback\"),r=null,o=-1,s=Number.MAX_VALUE,l=0;l<t.selPoints_.length;l++){var h=t.selPoints_[l],u=Math.pow(h.canvasx-a.dragEndX,2)+Math.pow(h.canvasy-a.dragEndY,2);!isNaN(u)&&(-1==o||u<s)&&(s=u,o=l)}var d=t.getNumericOption(\"highlightCircleSize\")+2;if(s<=d*d&&(r=t.selPoints_[o]),r){var c={cancelable:!0,point:r,canvasx:a.dragEndX,canvasy:a.dragEndY};if(t.cascadeEvents_(\"pointClick\",c))return;n&&n.call(t,e,r)}var c={cancelable:!0,xval:t.lastx_,pts:t.selPoints_,canvasx:a.dragEndX,canvasy:a.dragEndY};t.cascadeEvents_(\"click\",c)||i&&i.call(t,e,t.lastx_,t.selPoints_)},r.endZoom=function(t,e,a){e.clearZoomRect_(),a.isZooming=!1,r.maybeTreatMouseOpAsClick(t,e,a);var i=e.getArea();if(a.regionWidth>=10&&a.dragDirection==n.HORIZONTAL){var o=Math.min(a.dragStartX,a.dragEndX),s=Math.max(a.dragStartX,a.dragEndX);o=Math.max(o,i.x),s=Math.min(s,i.x+i.w),o<s&&e.doZoomX_(o,s),a.cancelNextDblclick=!0}else if(a.regionHeight>=10&&a.dragDirection==n.VERTICAL){var l=Math.min(a.dragStartY,a.dragEndY),h=Math.max(a.dragStartY,a.dragEndY);l=Math.max(l,i.y),h=Math.min(h,i.y+i.h),l<h&&e.doZoomY_(l,h),a.cancelNextDblclick=!0}a.dragStartX=null,a.dragStartY=null},r.startTouch=function(t,e,a){t.preventDefault(),t.touches.length>1&&(a.startTimeForDoubleTapMs=null);for(var i=[],n=0;n<t.touches.length;n++){var r=t.touches[n];i.push({pageX:r.pageX,pageY:r.pageY,dataX:e.toDataXCoord(r.pageX),dataY:e.toDataYCoord(r.pageY)})}if(a.initialTouches=i,1==i.length)a.initialPinchCenter=i[0],a.touchDirections={x:!0,y:!0};else if(i.length>=2){a.initialPinchCenter={pageX:.5*(i[0].pageX+i[1].pageX),pageY:.5*(i[0].pageY+i[1].pageY),dataX:.5*(i[0].dataX+i[1].dataX),dataY:.5*(i[0].dataY+i[1].dataY)};var o=180/Math.PI*Math.atan2(a.initialPinchCenter.pageY-i[0].pageY,i[0].pageX-a.initialPinchCenter.pageX);o=Math.abs(o),o>90&&(o=90-o),a.touchDirections={x:o<67.5,y:o>22.5}}a.initialRange={x:e.xAxisRange(),y:e.yAxisRange()}},r.moveTouch=function(t,e,a){a.startTimeForDoubleTapMs=null;var i,n=[];for(i=0;i<t.touches.length;i++){var r=t.touches[i];n.push({pageX:r.pageX,pageY:r.pageY})}var o,s=a.initialTouches,l=a.initialPinchCenter;o=1==n.length?n[0]:{pageX:.5*(n[0].pageX+n[1].pageX),pageY:.5*(n[0].pageY+n[1].pageY)};var h={pageX:o.pageX-l.pageX,pageY:o.pageY-l.pageY},u=a.initialRange.x[1]-a.initialRange.x[0],d=a.initialRange.y[0]-a.initialRange.y[1];h.dataX=h.pageX/e.plotter_.area.w*u,h.dataY=h.pageY/e.plotter_.area.h*d;var c,p;if(1==n.length)c=1,p=1;else if(n.length>=2){var g=s[1].pageX-l.pageX;c=(n[1].pageX-o.pageX)/g;var f=s[1].pageY-l.pageY;p=(n[1].pageY-o.pageY)/f}c=Math.min(8,Math.max(.125,c)),p=Math.min(8,Math.max(.125,p));var v=!1;if(a.touchDirections.x&&(e.dateWindow_=[l.dataX-h.dataX+(a.initialRange.x[0]-l.dataX)/c,l.dataX-h.dataX+(a.initialRange.x[1]-l.dataX)/c],v=!0),a.touchDirections.y)for(i=0;i<1;i++){var _=e.axes_[i],y=e.attributes_.getForAxis(\"logscale\",i);y||(_.valueRange=[l.dataY-h.dataY+(a.initialRange.y[0]-l.dataY)/p,l.dataY-h.dataY+(a.initialRange.y[1]-l.dataY)/p],v=!0)}if(e.drawGraph_(!1),v&&n.length>1&&e.getFunctionOption(\"zoomCallback\")){var x=e.xAxisRange();e.getFunctionOption(\"zoomCallback\").call(e,x[0],x[1],e.yAxisRanges())}},r.endTouch=function(t,e,a){if(0!==t.touches.length)r.startTouch(t,e,a);else if(1==t.changedTouches.length){var i=(new Date).getTime(),n=t.changedTouches[0];a.startTimeForDoubleTapMs&&i-a.startTimeForDoubleTapMs<500&&a.doubleTapX&&Math.abs(a.doubleTapX-n.screenX)<50&&a.doubleTapY&&Math.abs(a.doubleTapY-n.screenY)<50?e.resetZoom():(a.startTimeForDoubleTapMs=i,a.doubleTapX=n.screenX,a.doubleTapY=n.screenY)}};var o=function(t,e,a){return t<e?e-t:t>a?t-a:0},s=function(t,e){var a=n.findPos(e.canvas_),i={left:a.x,right:a.x+e.canvas_.offsetWidth,top:a.y,bottom:a.y+e.canvas_.offsetHeight},r={x:n.pageX(t),y:n.pageY(t)},s=o(r.x,i.left,i.right),l=o(r.y,i.top,i.bottom);return Math.max(s,l)};r.defaultModel={mousedown:function(t,e,a){if(!t.button||2!=t.button){a.initializeMouseDown(t,e,a),t.altKey||t.shiftKey?r.startPan(t,e,a):r.startZoom(t,e,a);var i=function(t){if(a.isZooming){s(t,e)<100?r.moveZoom(t,e,a):null!==a.dragEndX&&(a.dragEndX=null,a.dragEndY=null,e.clearZoomRect_())}else a.isPanning&&r.movePan(t,e,a)},o=function t(o){a.isZooming?null!==a.dragEndX?r.endZoom(o,e,a):r.maybeTreatMouseOpAsClick(o,e,a):a.isPanning&&r.endPan(o,e,a),n.removeEvent(document,\"mousemove\",i),n.removeEvent(document,\"mouseup\",t),a.destroy()};e.addAndTrackEvent(document,\"mousemove\",i),e.addAndTrackEvent(document,\"mouseup\",o)}},willDestroyContextMyself:!0,touchstart:function(t,e,a){r.startTouch(t,e,a)},touchmove:function(t,e,a){r.moveTouch(t,e,a)},touchend:function(t,e,a){r.endTouch(t,e,a)},dblclick:function(t,e,a){if(a.cancelNextDblclick)return void(a.cancelNextDblclick=!1);var i={canvasx:a.dragEndX,canvasy:a.dragEndY,cancelable:!0};e.cascadeEvents_(\"dblclick\",i)||t.altKey||t.shiftKey||e.resetZoom()}},r.nonInteractiveModel_={mousedown:function(t,e,a){a.initializeMouseDown(t,e,a)},mouseup:r.maybeTreatMouseOpAsClick},r.dragIsPanInteractionModel={mousedown:function(t,e,a){a.initializeMouseDown(t,e,a),r.startPan(t,e,a)},mousemove:function(t,e,a){a.isPanning&&r.movePan(t,e,a)},mouseup:function(t,e,a){a.isPanning&&r.endPan(t,e,a)}},a.default=r,e.exports=a.default},{\"./dygraph-utils\":17}],13:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(t){this.dygraph_=t,this.points=[],this.setNames=[],this.annotations=[],this.yAxes_=null,this.xTicks_=null,this.yTicks_=null};r.prototype.addDataset=function(t,e){this.points.push(e),this.setNames.push(t)},r.prototype.getPlotArea=function(){return this.area_},r.prototype.computePlotArea=function(){var t={x:0,y:0};t.w=this.dygraph_.width_-t.x-this.dygraph_.getOption(\"rightGap\"),t.h=this.dygraph_.height_;var e={chart_div:this.dygraph_.graphDiv,reserveSpaceLeft:function(e){var a={x:t.x,y:t.y,w:e,h:t.h};return t.x+=e,t.w-=e,a},reserveSpaceRight:function(e){var a={x:t.x+t.w-e,y:t.y,w:e,h:t.h};return t.w-=e,a},reserveSpaceTop:function(e){var a={x:t.x,y:t.y,w:t.w,h:e};return t.y+=e,t.h-=e,a},reserveSpaceBottom:function(e){var a={x:t.x,y:t.y+t.h-e,w:t.w,h:e};return t.h-=e,a},chartRect:function(){return{x:t.x,y:t.y,w:t.w,h:t.h}}};this.dygraph_.cascadeEvents_(\"layout\",e),this.area_=t},r.prototype.setAnnotations=function(t){this.annotations=[];for(var e=this.dygraph_.getOption(\"xValueParser\")||function(t){return t},a=0;a<t.length;a++){var i={};if(!t[a].xval&&void 0===t[a].x)return void console.error(\"Annotations must have an 'x' property\");if(t[a].icon&&(!t[a].hasOwnProperty(\"width\")||!t[a].hasOwnProperty(\"height\")))return void console.error(\"Must set width and height when setting annotation.icon property\");n.update(i,t[a]),i.xval||(i.xval=e(i.x)),this.annotations.push(i)}},r.prototype.setXTicks=function(t){this.xTicks_=t},r.prototype.setYAxes=function(t){this.yAxes_=t},r.prototype.evaluate=function(){this._xAxis={},this._evaluateLimits(),this._evaluateLineCharts(),this._evaluateLineTicks(),this._evaluateAnnotations()},r.prototype._evaluateLimits=function(){var t=this.dygraph_.xAxisRange();this._xAxis.minval=t[0],this._xAxis.maxval=t[1];var e=t[1]-t[0];this._xAxis.scale=0!==e?1/e:1,this.dygraph_.getOptionForAxis(\"logscale\",\"x\")&&(this._xAxis.xlogrange=n.log10(this._xAxis.maxval)-n.log10(this._xAxis.minval),this._xAxis.xlogscale=0!==this._xAxis.xlogrange?1/this._xAxis.xlogrange:1);for(var a=0;a<this.yAxes_.length;a++){var i=this.yAxes_[a];i.minyval=i.computedValueRange[0],i.maxyval=i.computedValueRange[1],i.yrange=i.maxyval-i.minyval,i.yscale=0!==i.yrange?1/i.yrange:1,this.dygraph_.getOption(\"logscale\")&&(i.ylogrange=n.log10(i.maxyval)-n.log10(i.minyval),i.ylogscale=0!==i.ylogrange?1/i.ylogrange:1,isFinite(i.ylogrange)&&!isNaN(i.ylogrange)||console.error(\"axis \"+a+\" of graph at \"+i.g+\" can't be displayed in log scale for range [\"+i.minyval+\" - \"+i.maxyval+\"]\"))}},r.calcXNormal_=function(t,e,a){return a?(n.log10(t)-n.log10(e.minval))*e.xlogscale:(t-e.minval)*e.scale},r.calcYNormal_=function(t,e,a){if(a){var i=1-(n.log10(e)-n.log10(t.minyval))*t.ylogscale;return isFinite(i)?i:NaN}return 1-(e-t.minyval)*t.yscale},r.prototype._evaluateLineCharts=function(){for(var t=this.dygraph_.getOption(\"stackedGraph\"),e=this.dygraph_.getOptionForAxis(\"logscale\",\"x\"),a=0;a<this.points.length;a++){for(var i=this.points[a],n=this.setNames[a],o=this.dygraph_.getOption(\"connectSeparatedPoints\",n),s=this.dygraph_.axisPropertiesForSeries(n),l=this.dygraph_.attributes_.getForSeries(\"logscale\",n),h=0;h<i.length;h++){var u=i[h];u.x=r.calcXNormal_(u.xval,this._xAxis,e);var d=u.yval;t&&(u.y_stacked=r.calcYNormal_(s,u.yval_stacked,l),\nnull===d||isNaN(d)||(d=u.yval_stacked)),null===d&&(d=NaN,o||(u.yval=NaN)),u.y=r.calcYNormal_(s,d,l)}this.dygraph_.dataHandler_.onLineEvaluated(i,s,l)}},r.prototype._evaluateLineTicks=function(){var t,e,a,i,n,r;for(this.xticks=[],t=0;t<this.xTicks_.length;t++)e=this.xTicks_[t],a=e.label,r=!(\"label_v\"in e),n=r?e.v:e.label_v,(i=this.dygraph_.toPercentXCoord(n))>=0&&i<1&&this.xticks.push({pos:i,label:a,has_tick:r});for(this.yticks=[],t=0;t<this.yAxes_.length;t++)for(var o=this.yAxes_[t],s=0;s<o.ticks.length;s++)e=o.ticks[s],a=e.label,r=!(\"label_v\"in e),n=r?e.v:e.label_v,(i=this.dygraph_.toPercentYCoord(n,t))>0&&i<=1&&this.yticks.push({axis:t,pos:i,label:a,has_tick:r})},r.prototype._evaluateAnnotations=function(){var t,e={};for(t=0;t<this.annotations.length;t++){var a=this.annotations[t];e[a.xval+\",\"+a.series]=a}if(this.annotated_points=[],this.annotations&&this.annotations.length)for(var i=0;i<this.points.length;i++){var n=this.points[i];for(t=0;t<n.length;t++){var r=n[t],o=r.xval+\",\"+r.name;o in e&&(r.annotation=e[o],this.annotated_points.push(r))}}},r.prototype.removeAllDatasets=function(){delete this.points,delete this.setNames,delete this.setPointsLengths,delete this.setPointsOffsets,this.points=[],this.setNames=[],this.setPointsLengths=[],this.setPointsOffsets=[]},a.default=r,e.exports=a.default},{\"./dygraph-utils\":17}],14:[function(t,e,a){(function(t){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=null;if(void 0!==t);a.default=i,e.exports=a.default}).call(this,t(\"_process\"))},{_process:1}],15:[function(t,e,a){(function(i){\"use strict\";function n(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var r=t(\"./dygraph-utils\"),o=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(r),s=t(\"./dygraph-default-attrs\"),l=n(s),h=t(\"./dygraph-options-reference\"),u=(n(h),function(t){this.dygraph_=t,this.yAxes_=[],this.xAxis_={},this.series_={},this.global_=this.dygraph_.attrs_,this.user_=this.dygraph_.user_attrs_||{},this.labels_=[],this.highlightSeries_=this.get(\"highlightSeriesOpts\")||{},this.reparseSeries()});if(u.AXIS_STRING_MAPPINGS_={y:0,Y:0,y1:0,Y1:0,y2:1,Y2:1},u.axisToIndex_=function(t){if(\"string\"==typeof t){if(u.AXIS_STRING_MAPPINGS_.hasOwnProperty(t))return u.AXIS_STRING_MAPPINGS_[t];throw\"Unknown axis : \"+t}if(\"number\"==typeof t){if(0===t||1===t)return t;throw\"Dygraphs only supports two y-axes, indexed from 0-1.\"}if(t)throw\"Unknown axis : \"+t;return 0},u.prototype.reparseSeries=function(){var t=this.get(\"labels\");if(t){this.labels_=t.slice(1),this.yAxes_=[{series:[],options:{}}],this.xAxis_={options:{}},this.series_={};for(var e=this.user_.series||{},a=0;a<this.labels_.length;a++){var i=this.labels_[a],n=e[i]||{},r=u.axisToIndex_(n.axis);this.series_[i]={idx:a,yAxis:r,options:n},this.yAxes_[r]?this.yAxes_[r].series.push(i):this.yAxes_[r]={series:[i],options:{}}}var s=this.user_.axes||{};o.update(this.yAxes_[0].options,s.y||{}),this.yAxes_.length>1&&o.update(this.yAxes_[1].options,s.y2||{}),o.update(this.xAxis_.options,s.x||{})}},u.prototype.get=function(t){var e=this.getGlobalUser_(t);return null!==e?e:this.getGlobalDefault_(t)},u.prototype.getGlobalUser_=function(t){return this.user_.hasOwnProperty(t)?this.user_[t]:null},u.prototype.getGlobalDefault_=function(t){return this.global_.hasOwnProperty(t)?this.global_[t]:l.default.hasOwnProperty(t)?l.default[t]:null},u.prototype.getForAxis=function(t,e){var a,i;if(\"number\"==typeof e)a=e,i=0===a?\"y\":\"y2\";else{if(\"y1\"==e&&(e=\"y\"),\"y\"==e)a=0;else if(\"y2\"==e)a=1;else{if(\"x\"!=e)throw\"Unknown axis \"+e;a=-1}i=e}var n=-1==a?this.xAxis_:this.yAxes_[a];if(n){var r=n.options;if(r.hasOwnProperty(t))return r[t]}if(\"x\"!==e||\"logscale\"!==t){var o=this.getGlobalUser_(t);if(null!==o)return o}var s=l.default.axes[i];return s.hasOwnProperty(t)?s[t]:this.getGlobalDefault_(t)},u.prototype.getForSeries=function(t,e){if(e===this.dygraph_.getHighlightSeries()&&this.highlightSeries_.hasOwnProperty(t))return this.highlightSeries_[t];if(!this.series_.hasOwnProperty(e))throw\"Unknown series: \"+e;var a=this.series_[e],i=a.options;return i.hasOwnProperty(t)?i[t]:this.getForAxis(t,a.yAxis)},u.prototype.numAxes=function(){return this.yAxes_.length},u.prototype.axisForSeries=function(t){return this.series_[t].yAxis},u.prototype.axisOptions=function(t){return this.yAxes_[t].options},u.prototype.seriesForAxis=function(t){return this.yAxes_[t].series},u.prototype.seriesNames=function(){return this.labels_},void 0!==i);a.default=u,e.exports=a.default}).call(this,t(\"_process\"))},{\"./dygraph-default-attrs\":10,\"./dygraph-options-reference\":14,\"./dygraph-utils\":17,_process:1}],16:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"./dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(t,e,a,i,n,r){return o(t,e,a,function(t){return\"logscale\"!==t&&i(t)},n,r)};a.numericLinearTicks=r;var o=function(t,e,a,i,r,o){var s,l,h,u,c=i(\"pixelsPerLabel\"),p=[];if(o)for(s=0;s<o.length;s++)p.push({v:o[s]});else{if(i(\"logscale\")){u=Math.floor(a/c);var g=n.binarySearch(t,d,1),f=n.binarySearch(e,d,-1);-1==g&&(g=0),-1==f&&(f=d.length-1);var v=null;if(f-g>=u/4){for(var _=f;_>=g;_--){var y=d[_],x=Math.log(y/t)/Math.log(e/t)*a,m={v:y};null===v?v={tickValue:y,pixel_coord:x}:Math.abs(x-v.pixel_coord)>=c?v={tickValue:y,pixel_coord:x}:m.label=\"\",p.push(m)}p.reverse()}}if(0===p.length){var b,w,A=i(\"labelsKMG2\");A?(b=[1,2,4,8,16,32,64,128,256],w=16):(b=[1,2,5,10,20,50,100],w=10);var O,D,E,L=Math.ceil(a/c),T=Math.abs(e-t)/L,S=Math.floor(Math.log(T)/Math.log(w)),P=Math.pow(w,S);for(l=0;l<b.length&&(O=P*b[l],D=Math.floor(t/O)*O,E=Math.ceil(e/O)*O,u=Math.abs(E-D)/O,!(a/u>c));l++);for(D>E&&(O*=-1),s=0;s<=u;s++)h=D+s*O,p.push({v:h})}}var C=i(\"axisLabelFormatter\");for(s=0;s<p.length;s++)void 0===p[s].label&&(p[s].label=C.call(r,p[s].v,0,i,r));return p};a.numericTicks=o;var s=function(t,e,a,i,n,r){var o=c(t,e,a,i);return o>=0?g(t,e,o,i,n):[]};a.dateTicker=s;var l={MILLISECONDLY:0,TWO_MILLISECONDLY:1,FIVE_MILLISECONDLY:2,TEN_MILLISECONDLY:3,FIFTY_MILLISECONDLY:4,HUNDRED_MILLISECONDLY:5,FIVE_HUNDRED_MILLISECONDLY:6,SECONDLY:7,TWO_SECONDLY:8,FIVE_SECONDLY:9,TEN_SECONDLY:10,THIRTY_SECONDLY:11,MINUTELY:12,TWO_MINUTELY:13,FIVE_MINUTELY:14,TEN_MINUTELY:15,THIRTY_MINUTELY:16,HOURLY:17,TWO_HOURLY:18,SIX_HOURLY:19,DAILY:20,TWO_DAILY:21,WEEKLY:22,MONTHLY:23,QUARTERLY:24,BIANNUAL:25,ANNUAL:26,DECADAL:27,CENTENNIAL:28,NUM_GRANULARITIES:29};a.Granularity=l;var h={DATEFIELD_Y:0,DATEFIELD_M:1,DATEFIELD_D:2,DATEFIELD_HH:3,DATEFIELD_MM:4,DATEFIELD_SS:5,DATEFIELD_MS:6,NUM_DATEFIELDS:7},u=[];u[l.MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:1,spacing:1},u[l.TWO_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:2,spacing:2},u[l.FIVE_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:5,spacing:5},u[l.TEN_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:10,spacing:10},u[l.FIFTY_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:50,spacing:50},u[l.HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:100,spacing:100},u[l.FIVE_HUNDRED_MILLISECONDLY]={datefield:h.DATEFIELD_MS,step:500,spacing:500},u[l.SECONDLY]={datefield:h.DATEFIELD_SS,step:1,spacing:1e3},u[l.TWO_SECONDLY]={datefield:h.DATEFIELD_SS,step:2,spacing:2e3},u[l.FIVE_SECONDLY]={datefield:h.DATEFIELD_SS,step:5,spacing:5e3},u[l.TEN_SECONDLY]={datefield:h.DATEFIELD_SS,step:10,spacing:1e4},u[l.THIRTY_SECONDLY]={datefield:h.DATEFIELD_SS,step:30,spacing:3e4},u[l.MINUTELY]={datefield:h.DATEFIELD_MM,step:1,spacing:6e4},u[l.TWO_MINUTELY]={datefield:h.DATEFIELD_MM,step:2,spacing:12e4},u[l.FIVE_MINUTELY]={datefield:h.DATEFIELD_MM,step:5,spacing:3e5},u[l.TEN_MINUTELY]={datefield:h.DATEFIELD_MM,step:10,spacing:6e5},u[l.THIRTY_MINUTELY]={datefield:h.DATEFIELD_MM,step:30,spacing:18e5},u[l.HOURLY]={datefield:h.DATEFIELD_HH,step:1,spacing:36e5},u[l.TWO_HOURLY]={datefield:h.DATEFIELD_HH,step:2,spacing:72e5},u[l.SIX_HOURLY]={datefield:h.DATEFIELD_HH,step:6,spacing:216e5},u[l.DAILY]={datefield:h.DATEFIELD_D,step:1,spacing:864e5},u[l.TWO_DAILY]={datefield:h.DATEFIELD_D,step:2,spacing:1728e5},u[l.WEEKLY]={datefield:h.DATEFIELD_D,step:7,spacing:6048e5},u[l.MONTHLY]={datefield:h.DATEFIELD_M,step:1,spacing:2629817280},u[l.QUARTERLY]={datefield:h.DATEFIELD_M,step:3,spacing:216e5*365.2524},u[l.BIANNUAL]={datefield:h.DATEFIELD_M,step:6,spacing:432e5*365.2524},u[l.ANNUAL]={datefield:h.DATEFIELD_Y,step:1,spacing:864e5*365.2524},u[l.DECADAL]={datefield:h.DATEFIELD_Y,step:10,spacing:315578073600},u[l.CENTENNIAL]={datefield:h.DATEFIELD_Y,step:100,spacing:3155780736e3};var d=function(){for(var t=[],e=-39;e<=39;e++)for(var a=Math.pow(10,e),i=1;i<=9;i++){var n=a*i;t.push(n)}return t}(),c=function(t,e,a,i){for(var n=i(\"pixelsPerLabel\"),r=0;r<l.NUM_GRANULARITIES;r++){if(a/p(t,e,r)>=n)return r}return-1},p=function(t,e,a){var i=u[a].spacing;return Math.round(1*(e-t)/i)},g=function(t,e,a,i,r){var o=i(\"axisLabelFormatter\"),s=i(\"labelsUTC\"),d=s?n.DateAccessorsUTC:n.DateAccessorsLocal,c=u[a].datefield,p=u[a].step,g=u[a].spacing,f=new Date(t),v=[];v[h.DATEFIELD_Y]=d.getFullYear(f),v[h.DATEFIELD_M]=d.getMonth(f),v[h.DATEFIELD_D]=d.getDate(f),v[h.DATEFIELD_HH]=d.getHours(f),v[h.DATEFIELD_MM]=d.getMinutes(f),v[h.DATEFIELD_SS]=d.getSeconds(f),v[h.DATEFIELD_MS]=d.getMilliseconds(f);var _=v[c]%p;a==l.WEEKLY&&(_=d.getDay(f)),v[c]-=_;for(var y=c+1;y<h.NUM_DATEFIELDS;y++)v[y]=y===h.DATEFIELD_D?1:0;var x=[],m=d.makeDate.apply(null,v),b=m.getTime();if(a<=l.HOURLY)for(b<t&&(b+=g,m=new Date(b));b<=e;)x.push({v:b,label:o.call(r,m,a,i,r)}),b+=g,m=new Date(b);else for(b<t&&(v[c]+=p,m=d.makeDate.apply(null,v),b=m.getTime());b<=e;)(a>=l.DAILY||d.getHours(m)%p==0)&&x.push({v:b,label:o.call(r,m,a,i,r)}),v[c]+=p,m=d.makeDate.apply(null,v),b=m.getTime();return x};a.getDateAxis=g},{\"./dygraph-utils\":17}],17:[function(t,e,a){\"use strict\";function i(t,e,a){t.removeEventListener(e,a,!1)}function n(t){return t=t||window.event,t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,t.cancel=!0,t.returnValue=!1,!1}function r(t,e,a){var i,n,r;if(0===e)i=a,n=a,r=a;else{var o=Math.floor(6*t),s=6*t-o,l=a*(1-e),h=a*(1-e*s),u=a*(1-e*(1-s));switch(o){case 1:i=h,n=a,r=l;break;case 2:i=l,n=a,r=u;break;case 3:i=l,n=h,r=a;break;case 4:i=u,n=l,r=a;break;case 5:i=a,n=l,r=h;break;case 6:case 0:i=a,n=u,r=l}}return i=Math.floor(255*i+.5),n=Math.floor(255*n+.5),r=Math.floor(255*r+.5),\"rgb(\"+i+\",\"+n+\",\"+r+\")\"}function o(t){var e=t.getBoundingClientRect(),a=window,i=document.documentElement;return{x:e.left+(a.pageXOffset||i.scrollLeft),y:e.top+(a.pageYOffset||i.scrollTop)}}function s(t){return!t.pageX||t.pageX<0?0:t.pageX}function l(t){return!t.pageY||t.pageY<0?0:t.pageY}function h(t,e){return s(t)-e.px}function u(t,e){return l(t)-e.py}function d(t){return!!t&&!isNaN(t)}function c(t,e){return!!t&&(null!==t.yval&&(null!==t.x&&void 0!==t.x&&(null!==t.y&&void 0!==t.y&&!(isNaN(t.x)||!e&&isNaN(t.y)))))}function p(t,e){var a=Math.min(Math.max(1,e||2),21);return Math.abs(t)<.001&&0!==t?t.toExponential(a-1):t.toPrecision(a)}function g(t){return t<10?\"0\"+t:\"\"+t}function f(t,e,a,i){var n=g(t)+\":\"+g(e);if(a&&(n+=\":\"+g(a),i)){var r=\"\"+i;n+=\".\"+(\"000\"+r).substring(r.length)}return n}function v(t,e){var a=e?tt:$,i=new Date(t),n=a.getFullYear(i),r=a.getMonth(i),o=a.getDate(i),s=a.getHours(i),l=a.getMinutes(i),h=a.getSeconds(i),u=a.getMilliseconds(i),d=\"\"+n,c=g(r+1),p=g(o),v=3600*s+60*l+h+.001*u,_=d+\"/\"+c+\"/\"+p;return v&&(_+=\" \"+f(s,l,h,u)),_}function _(t,e){var a=Math.pow(10,e);return Math.round(t*a)/a}function y(t,e,a,i,n){for(var r=!0;r;){var o=t,s=e,l=a,h=i,u=n;if(r=!1,null!==h&&void 0!==h&&null!==u&&void 0!==u||(h=0,u=s.length-1),h>u)return-1;null!==l&&void 0!==l||(l=0);var d,c=function(t){return t>=0&&t<s.length},p=parseInt((h+u)/2,10),g=s[p];if(g==o)return p;if(g>o){if(l>0&&(d=p-1,c(d)&&s[d]<o))return p;t=o,e=s,a=l,i=h,n=p-1,r=!0,c=p=g=d=void 0}else{if(!(g<o))return-1;if(l<0&&(d=p+1,c(d)&&s[d]>o))return p;t=o,e=s,a=l,i=p+1,n=u,r=!0,c=p=g=d=void 0}}}function x(t){var e,a;if((-1==t.search(\"-\")||-1!=t.search(\"T\")||-1!=t.search(\"Z\"))&&(a=m(t))&&!isNaN(a))return a;if(-1!=t.search(\"-\")){for(e=t.replace(\"-\",\"/\",\"g\");-1!=e.search(\"-\");)e=e.replace(\"-\",\"/\");a=m(e)}else 8==t.length?(e=t.substr(0,4)+\"/\"+t.substr(4,2)+\"/\"+t.substr(6,2),a=m(e)):a=m(t);return a&&!isNaN(a)||console.error(\"Couldn't parse \"+t+\" as a date\"),a}function m(t){return new Date(t).getTime()}function b(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(t[a]=e[a]);return t}function w(t,e){if(void 0!==e&&null!==e)for(var a in e)e.hasOwnProperty(a)&&(null===e[a]?t[a]=null:A(e[a])?t[a]=e[a].slice():!function(t){return\"object\"==typeof Node?t instanceof Node:\"object\"==typeof t&&\"number\"==typeof t.nodeType&&\"string\"==typeof t.nodeName}(e[a])&&\"object\"==typeof e[a]?(\"object\"==typeof t[a]&&null!==t[a]||(t[a]={}),w(t[a],e[a])):t[a]=e[a]);return t}function A(t){var e=typeof t;return(\"object\"==e||\"function\"==e&&\"function\"==typeof t.item)&&null!==t&&\"number\"==typeof t.length&&3!==t.nodeType}function O(t){return\"object\"==typeof t&&null!==t&&\"function\"==typeof t.getTime}function D(t){for(var e=[],a=0;a<t.length;a++)A(t[a])?e.push(D(t[a])):e.push(t[a]);return e}function E(){return document.createElement(\"canvas\")}function L(t){try{var e=window.devicePixelRatio,a=t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1;return void 0!==e?e/a:1}catch(t){return 1}}function T(t,e,a,i){e=e||0,a=a||t.length,this.hasNext=!0,this.peek=null,this.start_=e,this.array_=t,this.predicate_=i,this.end_=Math.min(t.length,e+a),this.nextIdx_=e-1,this.next()}function S(t,e,a,i){return new T(t,e,a,i)}function P(t,e,a,i){var n,r=0,o=(new Date).getTime();if(t(r),1==e)return void i();var s=e-1;!function l(){r>=e||et.call(window,function(){var e=(new Date).getTime(),h=e-o;n=r,r=Math.floor(h/a);var u=r-n;r+u>s||r>=s?(t(s),i()):(0!==u&&t(r),l())})}()}function C(t,e){var a={};if(t)for(var i=1;i<t.length;i++)a[t[i]]=!0;var n=function(t){for(var e in t)if(t.hasOwnProperty(e)&&!at[e])return!0;return!1};for(var r in e)if(e.hasOwnProperty(r))if(\"highlightSeriesOpts\"==r||a[r]&&!e.series){if(n(e[r]))return!0}else if(\"series\"==r||\"axes\"==r){var o=e[r];for(var s in o)if(o.hasOwnProperty(s)&&n(o[s]))return!0}else if(!at[r])return!0;return!1}function M(t){for(var e=0;e<t.length;e++){var a=t.charAt(e);if(\"\\r\"===a)return e+1<t.length&&\"\\n\"===t.charAt(e+1)?\"\\r\\n\":a;if(\"\\n\"===a)return e+1<t.length&&\"\\r\"===t.charAt(e+1)?\"\\n\\r\":a}return null}function N(t,e){if(null===e||null===t)return!1;for(var a=t;a&&a!==e;)a=a.parentNode;return a===e}function F(t,e){return e<0?1/Math.pow(t,-e):Math.pow(t,e)}function k(t){var e=nt.exec(t);if(!e)return null;var a=parseInt(e[1],10),i=parseInt(e[2],10),n=parseInt(e[3],10);return e[4]?{r:a,g:i,b:n,a:parseFloat(e[4])}:{r:a,g:i,b:n}}function R(t){var e=k(t);if(e)return e;var a=document.createElement(\"div\");a.style.backgroundColor=t,a.style.visibility=\"hidden\",document.body.appendChild(a);var i=window.getComputedStyle(a,null).backgroundColor;return document.body.removeChild(a),k(i)}function I(t){try{(t||document.createElement(\"canvas\")).getContext(\"2d\")}catch(t){return!1}return!0}function H(t,e,a){var i=parseFloat(t);if(!isNaN(i))return i;if(/^ *$/.test(t))return null;if(/^ *nan *$/i.test(t))return NaN;var n=\"Unable to parse '\"+t+\"' as a number\";return void 0!==a&&void 0!==e&&(n+=\" on line \"+(1+(e||0))+\" ('\"+a+\"') of CSV.\"),console.error(n),null}function Y(t,e){var a=e(\"sigFigs\");if(null!==a)return p(t,a);var i,n=e(\"digitsAfterDecimal\"),r=e(\"maxNumberWidth\"),o=e(\"labelsKMB\"),s=e(\"labelsKMG2\");if(i=0!==t&&(Math.abs(t)>=Math.pow(10,r)||Math.abs(t)<Math.pow(10,-n))?t.toExponential(n):\"\"+_(t,n),o||s){var l,h=[],u=[];o&&(l=1e3,h=rt),s&&(o&&console.warn(\"Setting both labelsKMB and labelsKMG2. Pick one!\"),l=1024,h=ot,u=st);for(var d=Math.abs(t),c=F(l,h.length),g=h.length-1;g>=0;g--,c/=l)if(d>=c){i=_(t/c,n)+h[g];break}if(s){var f=String(t.toExponential()).split(\"e-\");2===f.length&&f[1]>=3&&f[1]<=24&&(i=f[1]%3>0?_(f[0]/F(10,f[1]%3),n):Number(f[0]).toFixed(2),i+=u[Math.floor(f[1]/3)-1])}}return i}function X(t,e,a){return Y.call(this,t,a)}function V(t,e,a){var i=a(\"labelsUTC\"),n=i?tt:$,r=n.getFullYear(t),o=n.getMonth(t),s=n.getDate(t),l=n.getHours(t),h=n.getMinutes(t),u=n.getSeconds(t),d=n.getMilliseconds(t);if(e>=G.Granularity.DECADAL)return\"\"+r;if(e>=G.Granularity.MONTHLY)return lt[o]+\"&#160;\"+r;if(0===3600*l+60*h+u+.001*d||e>=G.Granularity.DAILY)return g(s)+\"&#160;\"+lt[o];if(e<G.Granularity.SECONDLY){var c=\"\"+d;return g(u)+\".\"+(\"000\"+c).substring(c.length)}return e>G.Granularity.MINUTELY?f(l,h,u,0):f(l,h,u,d)}function Z(t,e){return v(t,e(\"labelsUTC\"))}Object.defineProperty(a,\"__esModule\",{value:!0}),a.removeEvent=i,a.cancelEvent=n,a.hsvToRGB=r,a.findPos=o,a.pageX=s,a.pageY=l,a.dragGetX_=h,a.dragGetY_=u,a.isOK=d,a.isValidPoint=c,a.floatFormat=p,a.zeropad=g,a.hmsString_=f,a.dateString_=v,a.round_=_,a.binarySearch=y,a.dateParser=x,a.dateStrToMillis=m,a.update=b,a.updateDeep=w,a.isArrayLike=A,a.isDateLike=O,a.clone=D,a.createCanvas=E,a.getContextPixelRatio=L,a.Iterator=T,a.createIterator=S,a.repeatAndCleanup=P,a.isPixelChangingOptionList=C,a.detectLineDelimiter=M,a.isNodeContainedBy=N,a.pow=F,a.toRGB_=R,a.isCanvasSupported=I,a.parseFloat_=H,a.numberValueFormatter=Y,a.numberAxisLabelFormatter=X,a.dateAxisLabelFormatter=V,a.dateValueFormatter=Z;var B=t(\"./dygraph-tickers\"),G=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(B);a.LOG_SCALE=10;var W=Math.log(10);a.LN_TEN=W;var U=function(t){return Math.log(t)/W};a.log10=U;var z=function(t,e,a){var i=U(t),n=U(e),r=i+a*(n-i);return Math.pow(10,r)};a.logRangeFraction=z;var j=[2,2];a.DOTTED_LINE=j;var K=[7,3];a.DASHED_LINE=K;var q=[7,2,2,2];a.DOT_DASH_LINE=q;a.HORIZONTAL=1;a.VERTICAL=2;var Q=function(t){return t.getContext(\"2d\")};a.getContext=Q;var J=function(t,e,a){t.addEventListener(e,a,!1)};a.addEvent=J;var $={getFullYear:function(t){return t.getFullYear()},getMonth:function(t){return t.getMonth()},getDate:function(t){return t.getDate()},getHours:function(t){return t.getHours()},getMinutes:function(t){return t.getMinutes()},getSeconds:function(t){return t.getSeconds()},getMilliseconds:function(t){return t.getMilliseconds()},getDay:function(t){return t.getDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(t,e,a,i,n,r,o)}};a.DateAccessorsLocal=$;var tt={getFullYear:function(t){return t.getUTCFullYear()},getMonth:function(t){return t.getUTCMonth()},getDate:function(t){return t.getUTCDate()},getHours:function(t){return t.getUTCHours()},getMinutes:function(t){return t.getUTCMinutes()},getSeconds:function(t){return t.getUTCSeconds()},getMilliseconds:function(t){return t.getUTCMilliseconds()},getDay:function(t){return t.getUTCDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(Date.UTC(t,e,a,i,n,r,o))}};a.DateAccessorsUTC=tt,T.prototype.next=function(){if(!this.hasNext)return null;for(var t=this.peek,e=this.nextIdx_+1,a=!1;e<this.end_;){if(!this.predicate_||this.predicate_(this.array_,e)){this.peek=this.array_[e],a=!0;break}e++}return this.nextIdx_=e,a||(this.hasNext=!1,this.peek=null),t};var et=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();a.requestAnimFrame=et;var at={annotationClickHandler:!0,annotationDblClickHandler:!0,annotationMouseOutHandler:!0,annotationMouseOverHandler:!0,axisLineColor:!0,axisLineWidth:!0,clickCallback:!0,drawCallback:!0,drawHighlightPointCallback:!0,drawPoints:!0,drawPointCallback:!0,drawGrid:!0,fillAlpha:!0,gridLineColor:!0,gridLineWidth:!0,hideOverlayOnMouseOut:!0,highlightCallback:!0,highlightCircleSize:!0,interactionModel:!0,labelsDiv:!0,labelsKMB:!0,labelsKMG2:!0,labelsSeparateLines:!0,labelsShowZeroValues:!0,legend:!0,panEdgeFraction:!0,pixelsPerYLabel:!0,pointClickCallback:!0,pointSize:!0,rangeSelectorPlotFillColor:!0,rangeSelectorPlotFillGradientColor:!0,rangeSelectorPlotStrokeColor:!0,rangeSelectorBackgroundStrokeColor:!0,rangeSelectorBackgroundLineWidth:!0,rangeSelectorPlotLineWidth:!0,rangeSelectorForegroundStrokeColor:!0,rangeSelectorForegroundLineWidth:!0,rangeSelectorAlpha:!0,showLabelsOnHighlight:!0,showRoller:!0,strokeWidth:!0,underlayCallback:!0,unhighlightCallback:!0,zoomCallback:!0},it={DEFAULT:function(t,e,a,i,n,r,o){a.beginPath(),a.fillStyle=r,a.arc(i,n,o,0,2*Math.PI,!1),a.fill()}};a.Circles=it;var nt=/^rgba?\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})(?:,\\s*([01](?:\\.\\d+)?))?\\)$/,rt=[\"K\",\"M\",\"B\",\"T\",\"Q\"],ot=[\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"],st=[\"m\",\"u\",\"n\",\"p\",\"f\",\"a\",\"z\",\"y\"],lt=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]},{\"./dygraph-tickers\":16}],18:[function(t,e,a){(function(i){\"use strict\";function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}function o(t){var e=t[0],a=e[0];if(\"number\"!=typeof a&&!x.isDateLike(a))throw new Error(\"Expected number or date but got \"+typeof a+\": \"+a+\".\");for(var i=1;i<e.length;i++){var n=e[i];if(null!==n&&void 0!==n&&(\"number\"!=typeof n&&!x.isArrayLike(n)))throw new Error(\"Expected number or array but got \"+typeof n+\": \"+n+\".\")}}Object.defineProperty(a,\"__esModule\",{value:!0});var s=function(){function t(t,e){var a=[],i=!0,n=!1,r=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(a.push(o.value),!e||a.length!==e);i=!0);}catch(t){n=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(n)throw r}}return a}return function(e,a){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,a);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),l=t(\"./dygraph-layout\"),h=r(l),u=t(\"./dygraph-canvas\"),d=r(u),c=t(\"./dygraph-options\"),p=r(c),g=t(\"./dygraph-interaction-model\"),f=r(g),v=t(\"./dygraph-tickers\"),_=n(v),y=t(\"./dygraph-utils\"),x=n(y),m=t(\"./dygraph-default-attrs\"),b=r(m),w=t(\"./dygraph-options-reference\"),A=(r(w),t(\"./iframe-tarp\")),O=r(A),D=t(\"./datahandler/default\"),E=r(D),L=t(\"./datahandler/bars-error\"),T=r(L),S=t(\"./datahandler/bars-custom\"),P=r(S),C=t(\"./datahandler/default-fractions\"),M=r(C),N=t(\"./datahandler/bars-fractions\"),F=r(N),k=t(\"./datahandler/bars\"),R=r(k),I=t(\"./plugins/annotations\"),H=r(I),Y=t(\"./plugins/axes\"),X=r(Y),V=t(\"./plugins/chart-labels\"),Z=r(V),B=t(\"./plugins/grid\"),G=r(B),W=t(\"./plugins/legend\"),U=r(W),z=t(\"./plugins/range-selector\"),j=r(z),K=t(\"./dygraph-gviz\"),q=r(K),Q=function(t,e,a){this.__init__(t,e,a)};Q.NAME=\"Dygraph\",Q.VERSION=\"2.1.0\",Q.DEFAULT_ROLL_PERIOD=1,Q.DEFAULT_WIDTH=480,Q.DEFAULT_HEIGHT=320,Q.ANIMATION_STEPS=12,Q.ANIMATION_DURATION=200,Q.Plotters=d.default._Plotters,Q.addedAnnotationCSS=!1,Q.prototype.__init__=function(t,e,a){if(this.is_initial_draw_=!0,this.readyFns_=[],null!==a&&void 0!==a||(a={}),a=Q.copyUserAttrs_(a),\"string\"==typeof t&&(t=document.getElementById(t)),!t)throw new Error(\"Constructing dygraph with a non-existent div!\");this.maindiv_=t,this.file_=e,this.rollPeriod_=a.rollPeriod||Q.DEFAULT_ROLL_PERIOD,this.previousVerticalX_=-1,this.fractions_=a.fractions||!1,this.dateWindow_=a.dateWindow||null,this.annotations_=[],t.innerHTML=\"\",\"\"===t.style.width&&a.width&&(t.style.width=a.width+\"px\"),\"\"===t.style.height&&a.height&&(t.style.height=a.height+\"px\"),\"\"===t.style.height&&0===t.clientHeight&&(t.style.height=Q.DEFAULT_HEIGHT+\"px\",\"\"===t.style.width&&(t.style.width=Q.DEFAULT_WIDTH+\"px\")),this.width_=t.clientWidth||a.width||0,this.height_=t.clientHeight||a.height||0,a.stackedGraph&&(a.fillGraph=!0),this.user_attrs_={},x.update(this.user_attrs_,a),this.attrs_={},x.updateDeep(this.attrs_,b.default),this.boundaryIds_=[],this.setIndexByName_={},this.datasetIndex_=[],this.registeredEvents_=[],this.eventListeners_={},this.attributes_=new p.default(this),this.createInterface_(),this.plugins_=[];for(var i=Q.PLUGINS.concat(this.getOption(\"plugins\")),n=0;n<i.length;n++){var r,o=i[n];r=void 0!==o.activate?o:new o;var s={plugin:r,events:{},options:{},pluginOptions:{}},l=r.activate(this);for(var h in l)l.hasOwnProperty(h)&&(s.events[h]=l[h]);this.plugins_.push(s)}for(var n=0;n<this.plugins_.length;n++){var u=this.plugins_[n];for(var h in u.events)if(u.events.hasOwnProperty(h)){var d=u.events[h],c=[u.plugin,d];h in this.eventListeners_?this.eventListeners_[h].push(c):this.eventListeners_[h]=[c]}}this.createDragInterface_(),this.start_()},Q.prototype.cascadeEvents_=function(t,e){if(!(t in this.eventListeners_))return!1;var a={dygraph:this,cancelable:!1,defaultPrevented:!1,preventDefault:function(){if(!a.cancelable)throw\"Cannot call preventDefault on non-cancelable event.\";a.defaultPrevented=!0},propagationStopped:!1,stopPropagation:function(){a.propagationStopped=!0}};x.update(a,e);var i=this.eventListeners_[t];if(i)for(var n=i.length-1;n>=0;n--){var r=i[n][0],o=i[n][1];if(o.call(r,a),a.propagationStopped)break}return a.defaultPrevented},Q.prototype.getPluginInstance_=function(t){for(var e=0;e<this.plugins_.length;e++){var a=this.plugins_[e];if(a.plugin instanceof t)return a.plugin}return null},Q.prototype.isZoomed=function(t){var e=!!this.dateWindow_;if(\"x\"===t)return e;var a=this.axes_.map(function(t){return!!t.valueRange}).indexOf(!0)>=0;if(null===t||void 0===t)return e||a;if(\"y\"===t)return a;throw new Error(\"axis parameter is [\"+t+\"] must be null, 'x' or 'y'.\")},Q.prototype.toString=function(){var t=this.maindiv_;return\"[Dygraph \"+(t&&t.id?t.id:t)+\"]\"},Q.prototype.attr_=function(t,e){return e?this.attributes_.getForSeries(t,e):this.attributes_.get(t)},Q.prototype.getOption=function(t,e){return this.attr_(t,e)},Q.prototype.getNumericOption=function(t,e){return this.getOption(t,e)},Q.prototype.getStringOption=function(t,e){return this.getOption(t,e)},Q.prototype.getBooleanOption=function(t,e){return this.getOption(t,e)},Q.prototype.getFunctionOption=function(t,e){return this.getOption(t,e)},Q.prototype.getOptionForAxis=function(t,e){return this.attributes_.getForAxis(t,e)},Q.prototype.optionsViewForAxis_=function(t){var e=this;return function(a){var i=e.user_attrs_.axes;return i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:(\"x\"!==t||\"logscale\"!==a)&&(void 0!==e.user_attrs_[a]?e.user_attrs_[a]:(i=e.attrs_.axes,i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:\"y\"==t&&e.axes_[0].hasOwnProperty(a)?e.axes_[0][a]:\"y2\"==t&&e.axes_[1].hasOwnProperty(a)?e.axes_[1][a]:e.attr_(a)))}},Q.prototype.rollPeriod=function(){return this.rollPeriod_},Q.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},Q.prototype.xAxisExtremes=function(){var t=this.getNumericOption(\"xRangePad\")/this.plotter_.area.w;if(0===this.numRows())return[0-t,1+t];var e=this.rawData_[0][0],a=this.rawData_[this.rawData_.length-1][0];if(t){var i=a-e;e-=i*t,a+=i*t}return[e,a]},Q.prototype.yAxisExtremes=function(){var t=this.gatherDatasets_(this.rolledSeries_,null),e=t.extremes,a=this.axes_;this.computeYAxisRanges_(e);var i=this.axes_;return this.axes_=a,i.map(function(t){return t.extremeRange})},Q.prototype.yAxisRange=function(t){if(void 0===t&&(t=0),t<0||t>=this.axes_.length)return null;var e=this.axes_[t];return[e.computedValueRange[0],e.computedValueRange[1]]},Q.prototype.yAxisRanges=function(){for(var t=[],e=0;e<this.axes_.length;e++)t.push(this.yAxisRange(e));return t},Q.prototype.toDomCoords=function(t,e,a){return[this.toDomXCoord(t),this.toDomYCoord(e,a)]},Q.prototype.toDomXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();return e.x+(t-a[0])/(a[1]-a[0])*e.w},Q.prototype.toDomYCoord=function(t,e){var a=this.toPercentYCoord(t,e);if(null===a)return null;var i=this.plotter_.area;return i.y+a*i.h},Q.prototype.toDataCoords=function(t,e,a){return[this.toDataXCoord(t),this.toDataYCoord(e,a)]},Q.prototype.toDataXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();if(this.attributes_.getForAxis(\"logscale\",\"x\")){var i=(t-e.x)/e.w;return x.logRangeFraction(a[0],a[1],i)}return a[0]+(t-e.x)/e.w*(a[1]-a[0])},Q.prototype.toDataYCoord=function(t,e){if(null===t)return null;var a=this.plotter_.area,i=this.yAxisRange(e);if(void 0===e&&(e=0),this.attributes_.getForAxis(\"logscale\",e)){var n=(t-a.y)/a.h;return x.logRangeFraction(i[1],i[0],n)}return i[0]+(a.y+a.h-t)/a.h*(i[1]-i[0])},Q.prototype.toPercentYCoord=function(t,e){if(null===t)return null;void 0===e&&(e=0);var a,i=this.yAxisRange(e);if(this.attributes_.getForAxis(\"logscale\",e)){var n=x.log10(i[0]),r=x.log10(i[1]);a=(r-x.log10(t))/(r-n)}else a=(i[1]-t)/(i[1]-i[0]);return a},Q.prototype.toPercentXCoord=function(t){if(null===t)return null;var e,a=this.xAxisRange();if(!0===this.attributes_.getForAxis(\"logscale\",\"x\")){var i=x.log10(a[0]),n=x.log10(a[1]);e=(x.log10(t)-i)/(n-i)}else e=(t-a[0])/(a[1]-a[0]);return e},Q.prototype.numColumns=function(){return this.rawData_?this.rawData_[0]?this.rawData_[0].length:this.attr_(\"labels\").length:0},Q.prototype.numRows=function(){return this.rawData_?this.rawData_.length:0},Q.prototype.getValue=function(t,e){return t<0||t>this.rawData_.length?null:e<0||e>this.rawData_[t].length?null:this.rawData_[t][e]},Q.prototype.createInterface_=function(){var t=this.maindiv_;this.graphDiv=document.createElement(\"div\"),this.graphDiv.style.textAlign=\"left\",this.graphDiv.style.position=\"relative\",t.appendChild(this.graphDiv),this.canvas_=x.createCanvas(),this.canvas_.style.position=\"absolute\",this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.canvas_ctx_=x.getContext(this.canvas_),this.hidden_ctx_=x.getContext(this.hidden_),this.resizeElements_(),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new h.default(this);var e=this;this.mouseMoveHandler_=function(t){e.mouseMove_(t)},this.mouseOutHandler_=function(t){var a=t.target||t.fromElement,i=t.relatedTarget||t.toElement;x.isNodeContainedBy(a,e.graphDiv)&&!x.isNodeContainedBy(i,e.graphDiv)&&e.mouseOut_(t)},this.addAndTrackEvent(window,\"mouseout\",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),this.resizeHandler_||(this.resizeHandler_=function(t){e.resize()},this.addAndTrackEvent(window,\"resize\",this.resizeHandler_))},Q.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+\"px\",this.graphDiv.style.height=this.height_+\"px\";var t=this.getNumericOption(\"pixelRatio\"),e=t||x.getContextPixelRatio(this.canvas_ctx_);this.canvas_.width=this.width_*e,this.canvas_.height=this.height_*e,this.canvas_.style.width=this.width_+\"px\",this.canvas_.style.height=this.height_+\"px\",1!==e&&this.canvas_ctx_.scale(e,e);var a=t||x.getContextPixelRatio(this.hidden_ctx_);this.hidden_.width=this.width_*a,this.hidden_.height=this.height_*a,this.hidden_.style.width=this.width_+\"px\",this.hidden_.style.height=this.height_+\"px\",1!==a&&this.hidden_ctx_.scale(a,a)},Q.prototype.destroy=function(){this.canvas_ctx_.restore(),this.hidden_ctx_.restore();for(var t=this.plugins_.length-1;t>=0;t--){var e=this.plugins_.pop();e.plugin.destroy&&e.plugin.destroy()}this.removeTrackedEvents_(),x.removeEvent(window,\"mouseout\",this.mouseOutHandler_),x.removeEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),x.removeEvent(window,\"resize\",this.resizeHandler_),this.resizeHandler_=null,function t(e){for(;e.hasChildNodes();)t(e.firstChild),e.removeChild(e.firstChild)}(this.maindiv_);var a=function(t){for(var e in t)\"object\"==typeof t[e]&&(t[e]=null)};a(this.layout_),a(this.plotter_),a(this)},Q.prototype.createPlotKitCanvas_=function(t){var e=x.createCanvas();return e.style.position=\"absolute\",e.style.top=t.style.top,e.style.left=t.style.left,\ne.width=this.width_,e.height=this.height_,e.style.width=this.width_+\"px\",e.style.height=this.height_+\"px\",e},Q.prototype.createMouseEventElement_=function(){return this.canvas_},Q.prototype.setColors_=function(){var t=this.getLabels(),e=t.length-1;this.colors_=[],this.colorsMap_={};for(var a=this.getNumericOption(\"colorSaturation\")||1,i=this.getNumericOption(\"colorValue\")||.5,n=Math.ceil(e/2),r=this.getOption(\"colors\"),o=this.visibility(),s=0;s<e;s++)if(o[s]){var l=t[s+1],h=this.attributes_.getForSeries(\"color\",l);if(!h)if(r)h=r[s%r.length];else{var u=s%2?n+(s+1)/2:Math.ceil((s+1)/2),d=1*u/(1+e);h=x.hsvToRGB(d,a,i)}this.colors_.push(h),this.colorsMap_[l]=h}},Q.prototype.getColors=function(){return this.colors_},Q.prototype.getPropertiesForSeries=function(t){for(var e=-1,a=this.getLabels(),i=1;i<a.length;i++)if(a[i]==t){e=i;break}return-1==e?null:{name:t,column:e,visible:this.visibility()[e-1],color:this.colorsMap_[t],axis:1+this.attributes_.axisForSeries(t)}},Q.prototype.createRollInterface_=function(){var t=this,e=this.roller_;e||(this.roller_=e=document.createElement(\"input\"),e.type=\"text\",e.style.display=\"none\",e.className=\"dygraph-roller\",this.graphDiv.appendChild(e));var a=this.getBooleanOption(\"showRoller\")?\"block\":\"none\",i=this.getArea(),n={top:i.y+i.h-25+\"px\",left:i.x+1+\"px\",display:a};e.size=\"2\",e.value=this.rollPeriod_,x.update(e.style,n),e.onchange=function(){return t.adjustRoll(e.value)}},Q.prototype.createDragInterface_=function(){var t={isZooming:!1,isPanning:!1,is2DPan:!1,dragStartX:null,dragStartY:null,dragEndX:null,dragEndY:null,dragDirection:null,prevEndX:null,prevEndY:null,prevDragDirection:null,cancelNextDblclick:!1,initialLeftmostDate:null,xUnitsPerPixel:null,dateRange:null,px:0,py:0,boundedDates:null,boundedValues:null,tarp:new O.default,initializeMouseDown:function(t,e,a){t.preventDefault?t.preventDefault():(t.returnValue=!1,t.cancelBubble=!0);var i=x.findPos(e.canvas_);a.px=i.x,a.py=i.y,a.dragStartX=x.dragGetX_(t,a),a.dragStartY=x.dragGetY_(t,a),a.cancelNextDblclick=!1,a.tarp.cover()},destroy:function(){var t=this;if((t.isZooming||t.isPanning)&&(t.isZooming=!1,t.dragStartX=null,t.dragStartY=null),t.isPanning){t.isPanning=!1,t.draggingDate=null,t.dateRange=null;for(var e=0;e<a.axes_.length;e++)delete a.axes_[e].draggingValue,delete a.axes_[e].dragValueRange}t.tarp.uncover()}},e=this.getOption(\"interactionModel\"),a=this;for(var i in e)e.hasOwnProperty(i)&&this.addAndTrackEvent(this.mouseEventElement_,i,function(e){return function(i){e(i,a,t)}}(e[i]));if(!e.willDestroyContextMyself){var n=function(e){t.destroy()};this.addAndTrackEvent(document,\"mouseup\",n)}},Q.prototype.drawZoomRect_=function(t,e,a,i,n,r,o,s){var l=this.canvas_ctx_;r==x.HORIZONTAL?l.clearRect(Math.min(e,o),this.layout_.getPlotArea().y,Math.abs(e-o),this.layout_.getPlotArea().h):r==x.VERTICAL&&l.clearRect(this.layout_.getPlotArea().x,Math.min(i,s),this.layout_.getPlotArea().w,Math.abs(i-s)),t==x.HORIZONTAL?a&&e&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(Math.min(e,a),this.layout_.getPlotArea().y,Math.abs(a-e),this.layout_.getPlotArea().h)):t==x.VERTICAL&&n&&i&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(this.layout_.getPlotArea().x,Math.min(i,n),this.layout_.getPlotArea().w,Math.abs(n-i)))},Q.prototype.clearZoomRect_=function(){this.currentZoomRectArgs_=null,this.canvas_ctx_.clearRect(0,0,this.width_,this.height_)},Q.prototype.doZoomX_=function(t,e){this.currentZoomRectArgs_=null;var a=this.toDataXCoord(t),i=this.toDataXCoord(e);this.doZoomXDates_(a,i)},Q.prototype.doZoomXDates_=function(t,e){var a=this,i=this.xAxisRange(),n=[t,e],r=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(i,n,null,null,function(){r&&r.call(a,t,e,a.yAxisRanges())})},Q.prototype.doZoomY_=function(t,e){var a=this;this.currentZoomRectArgs_=null;for(var i=this.yAxisRanges(),n=[],r=0;r<this.axes_.length;r++){var o=this.toDataYCoord(t,r),l=this.toDataYCoord(e,r);n.push([l,o])}var h=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(null,null,i,n,function(){if(h){var t=a.xAxisRange(),e=s(t,2),i=e[0],n=e[1];h.call(a,i,n,a.yAxisRanges())}})},Q.zoomAnimationFunction=function(t,e){return(1-Math.pow(1.5,-t))/(1-Math.pow(1.5,-e))},Q.prototype.resetZoom=function(){var t=this,e=this.isZoomed(\"x\"),a=this.isZoomed(\"y\"),i=e||a;if(this.clearSelection(),i){var n=this.xAxisExtremes(),r=s(n,2),o=r[0],l=r[1],h=this.getBooleanOption(\"animatedZooms\"),u=this.getFunctionOption(\"zoomCallback\");if(!h)return this.dateWindow_=null,this.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),this.drawGraph_(),void(u&&u.call(this,o,l,this.yAxisRanges()));var d=null,c=null,p=null,g=null;e&&(d=this.xAxisRange(),c=[o,l]),a&&(p=this.yAxisRanges(),g=this.yAxisExtremes()),this.doAnimatedZoom(d,c,p,g,function(){t.dateWindow_=null,t.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),u&&u.call(t,o,l,t.yAxisRanges())})}},Q.prototype.doAnimatedZoom=function(t,e,a,i,n){var r,o,s=this,l=this.getBooleanOption(\"animatedZooms\")?Q.ANIMATION_STEPS:1,h=[],u=[];if(null!==t&&null!==e)for(r=1;r<=l;r++)o=Q.zoomAnimationFunction(r,l),h[r-1]=[t[0]*(1-o)+o*e[0],t[1]*(1-o)+o*e[1]];if(null!==a&&null!==i)for(r=1;r<=l;r++){o=Q.zoomAnimationFunction(r,l);for(var d=[],c=0;c<this.axes_.length;c++)d.push([a[c][0]*(1-o)+o*i[c][0],a[c][1]*(1-o)+o*i[c][1]]);u[r-1]=d}x.repeatAndCleanup(function(t){if(u.length)for(var e=0;e<s.axes_.length;e++){var a=u[t][e];s.axes_[e].valueRange=[a[0],a[1]]}h.length&&(s.dateWindow_=h[t]),s.drawGraph_()},l,Q.ANIMATION_DURATION/l,n)},Q.prototype.getArea=function(){return this.plotter_.area},Q.prototype.eventToDomCoords=function(t){if(t.offsetX&&t.offsetY)return[t.offsetX,t.offsetY];var e=x.findPos(this.mouseEventElement_);return[x.pageX(t)-e.x,x.pageY(t)-e.y]},Q.prototype.findClosestRow=function(t){for(var e=1/0,a=-1,i=this.layout_.points,n=0;n<i.length;n++)for(var r=i[n],o=r.length,s=0;s<o;s++){var l=r[s];if(x.isValidPoint(l,!0)){var h=Math.abs(l.canvasx-t);h<e&&(e=h,a=l.idx)}}return a},Q.prototype.findClosestPoint=function(t,e){for(var a,i,n,r,o,s,l,h=1/0,u=this.layout_.points.length-1;u>=0;--u)for(var d=this.layout_.points[u],c=0;c<d.length;++c)r=d[c],x.isValidPoint(r)&&(i=r.canvasx-t,n=r.canvasy-e,(a=i*i+n*n)<h&&(h=a,o=r,s=u,l=r.idx));return{row:l,seriesName:this.layout_.setNames[s],point:o}},Q.prototype.findStackedPoint=function(t,e){for(var a,i,n=this.findClosestRow(t),r=0;r<this.layout_.points.length;++r){var o=this.getLeftBoundary_(r),s=n-o,l=this.layout_.points[r];if(!(s>=l.length)){var h=l[s];if(x.isValidPoint(h)){var u=h.canvasy;if(t>h.canvasx&&s+1<l.length){var d=l[s+1];if(x.isValidPoint(d)){var c=d.canvasx-h.canvasx;if(c>0){var p=(t-h.canvasx)/c;u+=p*(d.canvasy-h.canvasy)}}}else if(t<h.canvasx&&s>0){var g=l[s-1];if(x.isValidPoint(g)){var c=h.canvasx-g.canvasx;if(c>0){var p=(h.canvasx-t)/c;u+=p*(g.canvasy-h.canvasy)}}}(0===r||u<e)&&(a=h,i=r)}}}return{row:n,seriesName:this.layout_.setNames[i],point:a}},Q.prototype.mouseMove_=function(t){var e=this.layout_.points;if(void 0!==e&&null!==e){var a=this.eventToDomCoords(t),i=a[0],n=a[1],r=this.getOption(\"highlightSeriesOpts\"),o=!1;if(r&&!this.isSeriesLocked()){var s;s=this.getBooleanOption(\"stackedGraph\")?this.findStackedPoint(i,n):this.findClosestPoint(i,n),o=this.setSelection(s.row,s.seriesName)}else{var l=this.findClosestRow(i);o=this.setSelection(l)}var h=this.getFunctionOption(\"highlightCallback\");h&&o&&h.call(this,t,this.lastx_,this.selPoints_,this.lastRow_,this.highlightSet_)}},Q.prototype.getLeftBoundary_=function(t){if(this.boundaryIds_[t])return this.boundaryIds_[t][0];for(var e=0;e<this.boundaryIds_.length;e++)if(void 0!==this.boundaryIds_[e])return this.boundaryIds_[e][0];return 0},Q.prototype.animateSelection_=function(t){void 0===this.fadeLevel&&(this.fadeLevel=0),void 0===this.animateId&&(this.animateId=0);var e=this.fadeLevel,a=t<0?e:10-e;if(a<=0)return void(this.fadeLevel&&this.updateSelection_(1));var i=++this.animateId,n=this,r=function(){0!==n.fadeLevel&&t<0&&(n.fadeLevel=0,n.clearSelection())};x.repeatAndCleanup(function(e){n.animateId==i&&(n.fadeLevel+=t,0===n.fadeLevel?n.clearSelection():n.updateSelection_(n.fadeLevel/10))},a,30,r)},Q.prototype.updateSelection_=function(t){this.cascadeEvents_(\"select\",{selectedRow:-1===this.lastRow_?void 0:this.lastRow_,selectedX:-1===this.lastx_?void 0:this.lastx_,selectedPoints:this.selPoints_});var e,a=this.canvas_ctx_;if(this.getOption(\"highlightSeriesOpts\")){a.clearRect(0,0,this.width_,this.height_);var i=1-this.getNumericOption(\"highlightSeriesBackgroundAlpha\"),n=x.toRGB_(this.getOption(\"highlightSeriesBackgroundColor\"));if(i){if(void 0===t)return void this.animateSelection_(1);i*=t,a.fillStyle=\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+i+\")\",a.fillRect(0,0,this.width_,this.height_)}this.plotter_._renderLineChart(this.highlightSet_,a)}else if(this.previousVerticalX_>=0){var r=0,o=this.attr_(\"labels\");for(e=1;e<o.length;e++){var s=this.getNumericOption(\"highlightCircleSize\",o[e]);s>r&&(r=s)}var l=this.previousVerticalX_;a.clearRect(l-r-1,0,2*r+2,this.height_)}if(this.selPoints_.length>0){var h=this.selPoints_[0].canvasx;for(a.save(),e=0;e<this.selPoints_.length;e++){var u=this.selPoints_[e];if(!isNaN(u.canvasy)){var d=this.getNumericOption(\"highlightCircleSize\",u.name),c=this.getFunctionOption(\"drawHighlightPointCallback\",u.name),p=this.plotter_.colors[u.name];c||(c=x.Circles.DEFAULT),a.lineWidth=this.getNumericOption(\"strokeWidth\",u.name),a.strokeStyle=p,a.fillStyle=p,c.call(this,this,u.name,a,h,u.canvasy,p,d,u.idx)}}a.restore(),this.previousVerticalX_=h}},Q.prototype.setSelection=function(t,e,a){this.selPoints_=[];var i=!1;if(!1!==t&&t>=0){t!=this.lastRow_&&(i=!0),this.lastRow_=t;for(var n=0;n<this.layout_.points.length;++n){var r=this.layout_.points[n],o=t-this.getLeftBoundary_(n);if(o>=0&&o<r.length&&r[o].idx==t){var s=r[o];null!==s.yval&&this.selPoints_.push(s)}else for(var l=0;l<r.length;++l){var s=r[l];if(s.idx==t){null!==s.yval&&this.selPoints_.push(s);break}}}}else this.lastRow_>=0&&(i=!0),this.lastRow_=-1;return this.selPoints_.length?this.lastx_=this.selPoints_[0].xval:this.lastx_=-1,void 0!==e&&(this.highlightSet_!==e&&(i=!0),this.highlightSet_=e),void 0!==a&&(this.lockedSet_=a),i&&this.updateSelection_(void 0),i},Q.prototype.mouseOut_=function(t){this.getFunctionOption(\"unhighlightCallback\")&&this.getFunctionOption(\"unhighlightCallback\").call(this,t),this.getBooleanOption(\"hideOverlayOnMouseOut\")&&!this.lockedSet_&&this.clearSelection()},Q.prototype.clearSelection=function(){if(this.cascadeEvents_(\"deselect\",{}),this.lockedSet_=!1,this.fadeLevel)return void this.animateSelection_(-1);this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=-1,this.lastRow_=-1,this.highlightSet_=null},Q.prototype.getSelection=function(){if(!this.selPoints_||this.selPoints_.length<1)return-1;for(var t=0;t<this.layout_.points.length;t++)for(var e=this.layout_.points[t],a=0;a<e.length;a++)if(e[a].x==this.selPoints_[0].x)return e[a].idx;return-1},Q.prototype.getHighlightSeries=function(){return this.highlightSet_},Q.prototype.isSeriesLocked=function(){return this.lockedSet_},Q.prototype.loadedEvent_=function(t){this.rawData_=this.parseCSV_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_()},Q.prototype.addXTicks_=function(){var t;t=this.dateWindow_?[this.dateWindow_[0],this.dateWindow_[1]]:this.xAxisExtremes();var e=this.optionsViewForAxis_(\"x\"),a=e(\"ticker\")(t[0],t[1],this.plotter_.area.w,e,this);this.layout_.setXTicks(a)},Q.prototype.getHandlerClass_=function(){return this.attr_(\"dataHandler\")?this.attr_(\"dataHandler\"):this.fractions_?this.getBooleanOption(\"errorBars\")?F.default:M.default:this.getBooleanOption(\"customBars\")?P.default:this.getBooleanOption(\"errorBars\")?T.default:E.default},Q.prototype.predraw_=function(){var t=new Date;this.dataHandler_=new(this.getHandlerClass_()),this.layout_.computePlotArea(),this.computeYAxes_(),this.is_initial_draw_||(this.canvas_ctx_.restore(),this.hidden_ctx_.restore()),this.canvas_ctx_.save(),this.hidden_ctx_.save(),this.plotter_=new d.default(this,this.hidden_,this.hidden_ctx_,this.layout_),this.createRollInterface_(),this.cascadeEvents_(\"predraw\"),this.rolledSeries_=[null];for(var e=1;e<this.numColumns();e++){var a=this.dataHandler_.extractSeries(this.rawData_,e,this.attributes_);this.rollPeriod_>1&&(a=this.dataHandler_.rollingAverage(a,this.rollPeriod_,this.attributes_)),this.rolledSeries_.push(a)}this.drawGraph_();var i=new Date;this.drawingTimeMs_=i-t},Q.PointType=void 0,Q.stackPoints_=function(t,e,a,i){for(var n=null,r=null,o=null,s=-1,l=0;l<t.length;++l){var h=t[l],u=h.xval;void 0===e[u]&&(e[u]=0);var d=h.yval;isNaN(d)||null===d?\"none\"==i?d=0:(!function(e){if(!(s>=e))for(var a=e;a<t.length;++a)if(o=null,!isNaN(t[a].yval)&&null!==t[a].yval){s=a,o=t[a];break}}(l),d=r&&o&&\"none\"!=i?r.yval+(o.yval-r.yval)*((u-r.xval)/(o.xval-r.xval)):r&&\"all\"==i?r.yval:o&&\"all\"==i?o.yval:0):r=h;var c=e[u];n!=u&&(c+=d,e[u]=c),n=u,h.yval_stacked=c,c>a[1]&&(a[1]=c),c<a[0]&&(a[0]=c)}},Q.prototype.gatherDatasets_=function(t,e){var a,i,n,r,o,s,l=[],h=[],u=[],d={},c=t.length-1;for(a=c;a>=1;a--)if(this.visibility()[a-1]){if(e){s=t[a];var p=e[0],g=e[1];for(n=null,r=null,i=0;i<s.length;i++)s[i][0]>=p&&null===n&&(n=i),s[i][0]<=g&&(r=i);null===n&&(n=0);for(var f=n,v=!0;v&&f>0;)f--,v=null===s[f][1];null===r&&(r=s.length-1);var _=r;for(v=!0;v&&_<s.length-1;)_++,v=null===s[_][1];f!==n&&(n=f),_!==r&&(r=_),l[a-1]=[n,r],s=s.slice(n,r+1)}else s=t[a],l[a-1]=[0,s.length-1];var y=this.attr_(\"labels\")[a],x=this.dataHandler_.getExtremeYValues(s,e,this.getBooleanOption(\"stepPlot\",y)),m=this.dataHandler_.seriesToPoints(s,y,l[a-1][0]);this.getBooleanOption(\"stackedGraph\")&&(o=this.attributes_.axisForSeries(y),void 0===u[o]&&(u[o]=[]),Q.stackPoints_(m,u[o],x,this.getBooleanOption(\"stackedGraphNaNFill\"))),d[y]=x,h[a]=m}return{points:h,extremes:d,boundaryIds:l}},Q.prototype.drawGraph_=function(){var t=new Date,e=this.is_initial_draw_;this.is_initial_draw_=!1,this.layout_.removeAllDatasets(),this.setColors_(),this.attrs_.pointSize=.5*this.getNumericOption(\"highlightCircleSize\");var a=this.gatherDatasets_(this.rolledSeries_,this.dateWindow_),i=a.points,n=a.extremes;this.boundaryIds_=a.boundaryIds,this.setIndexByName_={};for(var r=this.attr_(\"labels\"),o=0,s=1;s<i.length;s++)this.visibility()[s-1]&&(this.layout_.addDataset(r[s],i[s]),this.datasetIndex_[s]=o++);for(var s=0;s<r.length;s++)this.setIndexByName_[r[s]]=s;if(this.computeYAxisRanges_(n),this.layout_.setYAxes(this.axes_),this.addXTicks_(),this.layout_.evaluate(),this.renderGraph_(e),this.getStringOption(\"timingName\")){var l=new Date;console.log(this.getStringOption(\"timingName\")+\" - drawGraph: \"+(l-t)+\"ms\")}},Q.prototype.renderGraph_=function(t){this.cascadeEvents_(\"clearChart\"),this.plotter_.clear();var e=this.getFunctionOption(\"underlayCallback\");e&&e.call(this,this.hidden_ctx_,this.layout_.getPlotArea(),this,this);var a={canvas:this.hidden_,drawingContext:this.hidden_ctx_};this.cascadeEvents_(\"willDrawChart\",a),this.plotter_.render(),this.cascadeEvents_(\"didDrawChart\",a),this.lastRow_=-1,this.canvas_.getContext(\"2d\").clearRect(0,0,this.width_,this.height_);var i=this.getFunctionOption(\"drawCallback\");if(null!==i&&i.call(this,this,t),t)for(this.readyFired_=!0;this.readyFns_.length>0;){var n=this.readyFns_.pop();n(this)}},Q.prototype.computeYAxes_=function(){var t,e,a;for(this.axes_=[],t=0;t<this.attributes_.numAxes();t++)e={g:this},x.update(e,this.attributes_.axisOptions(t)),this.axes_[t]=e;for(t=0;t<this.axes_.length;t++)if(0===t)e=this.optionsViewForAxis_(\"y\"+(t?\"2\":\"\")),(a=e(\"valueRange\"))&&(this.axes_[t].valueRange=a);else{var i=this.user_attrs_.axes;i&&i.y2&&(a=i.y2.valueRange)&&(this.axes_[t].valueRange=a)}},Q.prototype.numAxes=function(){return this.attributes_.numAxes()},Q.prototype.axisPropertiesForSeries=function(t){return this.axes_[this.attributes_.axisForSeries(t)]},Q.prototype.computeYAxisRanges_=function(t){for(var e,a,i,n,r,o=function(t){return isNaN(parseFloat(t))},s=this.attributes_.numAxes(),l=0;l<s;l++){var h=this.axes_[l],u=this.attributes_.getForAxis(\"logscale\",l),d=this.attributes_.getForAxis(\"includeZero\",l),c=this.attributes_.getForAxis(\"independentTicks\",l);i=this.attributes_.seriesForAxis(l),e=!0,n=.1;var p=this.getNumericOption(\"yRangePad\");if(null!==p&&(e=!1,n=p/this.plotter_.area.h),0===i.length)h.extremeRange=[0,1];else{for(var g,f,v=1/0,_=-1/0,y=0;y<i.length;y++)t.hasOwnProperty(i[y])&&(g=t[i[y]][0],null!==g&&(v=Math.min(g,v)),null!==(f=t[i[y]][1])&&(_=Math.max(f,_)));d&&!u&&(v>0&&(v=0),_<0&&(_=0)),v==1/0&&(v=0),_==-1/0&&(_=1),a=_-v,0===a&&(0!==_?a=Math.abs(_):(_=1,a=1));var m=_,b=v;e&&(u?(m=_+n*a,b=v):(m=_+n*a,b=v-n*a,b<0&&v>=0&&(b=0),m>0&&_<=0&&(m=0))),h.extremeRange=[b,m]}if(h.valueRange){var w=o(h.valueRange[0])?h.extremeRange[0]:h.valueRange[0],A=o(h.valueRange[1])?h.extremeRange[1]:h.valueRange[1];h.computedValueRange=[w,A]}else h.computedValueRange=h.extremeRange;if(!e)if(w=h.computedValueRange[0],A=h.computedValueRange[1],w===A&&(w-=.5,A+=.5),u){var O=n/(2*n-1),D=(n-1)/(2*n-1);h.computedValueRange[0]=x.logRangeFraction(w,A,O),h.computedValueRange[1]=x.logRangeFraction(w,A,D)}else a=A-w,h.computedValueRange[0]=w-a*n,h.computedValueRange[1]=A+a*n;if(c){h.independentTicks=c;var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\");h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this),r||(r=h)}}if(void 0===r)throw'Configuration Error: At least one axis has to have the \"independentTicks\" option activated.';for(var l=0;l<s;l++){var h=this.axes_[l];if(!h.independentTicks){for(var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\"),T=r.ticks,S=r.computedValueRange[1]-r.computedValueRange[0],P=h.computedValueRange[1]-h.computedValueRange[0],C=[],M=0;M<T.length;M++){var N=(T[M].v-r.computedValueRange[0])/S,F=h.computedValueRange[0]+N*P;C.push(F)}h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this,C)}}},Q.prototype.detectTypeFromString_=function(t){var e=!1,a=t.indexOf(\"-\");a>0&&\"e\"!=t[a-1]&&\"E\"!=t[a-1]||t.indexOf(\"/\")>=0||isNaN(parseFloat(t))?e=!0:8==t.length&&t>\"19700101\"&&t<\"20371231\"&&(e=!0),this.setXAxisOptions_(e)},Q.prototype.setXAxisOptions_=function(t){t?(this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter):(this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},Q.prototype.parseCSV_=function(t){var e,a,i=[],n=x.detectLineDelimiter(t),r=t.split(n||\"\\n\"),o=this.getStringOption(\"delimiter\");-1==r[0].indexOf(o)&&r[0].indexOf(\"\\t\")>=0&&(o=\"\\t\");var s=0;\"labels\"in this.user_attrs_||(s=1,this.attrs_.labels=r[0].split(o),this.attributes_.reparseSeries());for(var l,h=!1,u=this.attr_(\"labels\").length,d=!1,c=s;c<r.length;c++){var p=r[c];if(c,0!==p.length&&\"#\"!=p[0]){var g=p.split(o);if(!(g.length<2)){var f=[];if(h||(this.detectTypeFromString_(g[0]),l=this.getFunctionOption(\"xValueParser\"),h=!0),f[0]=l(g[0],this),this.fractions_)for(a=1;a<g.length;a++)e=g[a].split(\"/\"),2!=e.length?(console.error('Expected fractional \"num/den\" values in CSV data but found a value \\''+g[a]+\"' on line \"+(1+c)+\" ('\"+p+\"') which is not of this form.\"),f[a]=[0,0]):f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p)];else if(this.getBooleanOption(\"errorBars\"))for(g.length%2!=1&&console.error(\"Expected alternating (value, stdev.) pairs in CSV data but line \"+(1+c)+\" has an odd number of values (\"+(g.length-1)+\"): '\"+p+\"'\"),a=1;a<g.length;a+=2)f[(a+1)/2]=[x.parseFloat_(g[a],c,p),x.parseFloat_(g[a+1],c,p)];else if(this.getBooleanOption(\"customBars\"))for(a=1;a<g.length;a++){var v=g[a];/^ *$/.test(v)?f[a]=[null,null,null]:(e=v.split(\";\"),3==e.length?f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p),x.parseFloat_(e[2],c,p)]:console.warn('When using customBars, values must be either blank or \"low;center;high\" tuples (got \"'+v+'\" on line '+(1+c)))}else for(a=1;a<g.length;a++)f[a]=x.parseFloat_(g[a],c,p);if(i.length>0&&f[0]<i[i.length-1][0]&&(d=!0),f.length!=u&&console.error(\"Number of columns in line \"+c+\" (\"+f.length+\") does not agree with number of labels (\"+u+\") \"+p),0===c&&this.attr_(\"labels\")){var _=!0;for(a=0;_&&a<f.length;a++)f[a]&&(_=!1);if(_){console.warn(\"The dygraphs 'labels' option is set, but the first row of CSV data ('\"+p+\"') appears to also contain labels. Will drop the CSV labels and use the option labels.\");continue}}i.push(f)}}}return d&&(console.warn(\"CSV is out of order; order it correctly to speed loading.\"),i.sort(function(t,e){return t[0]-e[0]})),i},Q.prototype.parseArray_=function(t){if(0===t.length)return console.error(\"Can't plot empty data set\"),null;if(0===t[0].length)return console.error(\"Data set cannot contain an empty row\"),null;o(t);var e;if(null===this.attr_(\"labels\")){for(console.warn(\"Using default labels. Set labels explicitly via 'labels' in the options parameter\"),this.attrs_.labels=[\"X\"],e=1;e<t[0].length;e++)this.attrs_.labels.push(\"Y\"+e);this.attributes_.reparseSeries()}else{var a=this.attr_(\"labels\");if(a.length!=t[0].length)return console.error(\"Mismatch between number of labels (\"+a+\") and number of columns in array (\"+t[0].length+\")\"),null}if(x.isDateLike(t[0][0])){this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;var i=x.clone(t);for(e=0;e<t.length;e++){if(0===i[e].length)return console.error(\"Row \"+(1+e)+\" of data is empty\"),null;if(null===i[e][0]||\"function\"!=typeof i[e][0].getTime||isNaN(i[e][0].getTime()))return console.error(\"x value in row \"+(1+e)+\" is not a Date\"),null;i[e][0]=i[e][0].getTime()}return i}return this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=x.numberAxisLabelFormatter,t},Q.prototype.parseDataTable_=function(t){var e=t.getNumberOfColumns(),a=t.getNumberOfRows(),i=t.getColumnType(0);if(\"date\"==i||\"datetime\"==i)this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;else{if(\"number\"!=i)throw new Error(\"only 'date', 'datetime' and 'number' types are supported for column 1 of DataTable input (Got '\"+i+\"')\");this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter}var n,r,o=[],s={},l=!1;for(n=1;n<e;n++){var h=t.getColumnType(n);if(\"number\"==h)o.push(n);else{if(\"string\"!=h||!this.getBooleanOption(\"displayAnnotations\"))throw new Error(\"Only 'number' is supported as a dependent type with Gviz. 'string' is only supported if displayAnnotations is true\");var u=o[o.length-1];s.hasOwnProperty(u)?s[u].push(n):s[u]=[n],l=!0}}var d=[t.getColumnLabel(0)];for(n=0;n<o.length;n++)d.push(t.getColumnLabel(o[n])),this.getBooleanOption(\"errorBars\")&&(n+=1);this.attrs_.labels=d,e=d.length;var c=[],p=!1,g=[];for(n=0;n<a;n++){var f=[];if(void 0!==t.getValue(n,0)&&null!==t.getValue(n,0)){if(\"date\"==i||\"datetime\"==i?f.push(t.getValue(n,0).getTime()):f.push(t.getValue(n,0)),this.getBooleanOption(\"errorBars\"))for(r=0;r<e-1;r++)f.push([t.getValue(n,1+2*r),t.getValue(n,2+2*r)]);else{for(r=0;r<o.length;r++){var v=o[r];if(f.push(t.getValue(n,v)),l&&s.hasOwnProperty(v)&&null!==t.getValue(n,s[v][0])){var y={};y.series=t.getColumnLabel(v),y.xval=f[0],y.shortText=function(t){var e=String.fromCharCode(65+t%26);for(t=Math.floor(t/26);t>0;)e=String.fromCharCode(65+(t-1)%26)+e.toLowerCase(),t=Math.floor((t-1)/26);return e}(g.length),y.text=\"\";for(var m=0;m<s[v].length;m++)m&&(y.text+=\"\\n\"),y.text+=t.getValue(n,s[v][m]);g.push(y)}}for(r=0;r<f.length;r++)isFinite(f[r])||(f[r]=null)}c.length>0&&f[0]<c[c.length-1][0]&&(p=!0),c.push(f)}else console.warn(\"Ignoring row \"+n+\" of DataTable because of undefined or null first column.\")}p&&(console.warn(\"DataTable is out of order; order it correctly to speed loading.\"),c.sort(function(t,e){return t[0]-e[0]})),this.rawData_=c,g.length>0&&this.setAnnotations(g,!0),this.attributes_.reparseSeries()},Q.prototype.cascadeDataDidUpdateEvent_=function(){this.cascadeEvents_(\"dataDidUpdate\",{})},Q.prototype.start_=function(){var t=this.file_;if(\"function\"==typeof t&&(t=t()),x.isArrayLike(t))this.rawData_=this.parseArray_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"object\"==typeof t&&\"function\"==typeof t.getColumnRange)this.parseDataTable_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"string\"==typeof t){var e=x.detectLineDelimiter(t);if(e)this.loadedEvent_(t);else{var a;a=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\");var i=this;a.onreadystatechange=function(){4==a.readyState&&(200!==a.status&&0!==a.status||i.loadedEvent_(a.responseText))},a.open(\"GET\",t,!0),a.send(null)}}else console.error(\"Unknown data format: \"+typeof t)},Q.prototype.updateOptions=function(t,e){void 0===e&&(e=!1);var a=t.file,i=Q.copyUserAttrs_(t);\"rollPeriod\"in i&&(this.rollPeriod_=i.rollPeriod),\"dateWindow\"in i&&(this.dateWindow_=i.dateWindow);var n=x.isPixelChangingOptionList(this.attr_(\"labels\"),i);x.updateDeep(this.user_attrs_,i),this.attributes_.reparseSeries(),a?(this.cascadeEvents_(\"dataWillUpdate\",{}),this.file_=a,e||this.start_()):e||(n?this.predraw_():this.renderGraph_(!1))},Q.copyUserAttrs_=function(t){var e={};for(var a in t)t.hasOwnProperty(a)&&\"file\"!=a&&t.hasOwnProperty(a)&&(e[a]=t[a]);return e},Q.prototype.resize=function(t,e){if(!this.resize_lock){this.resize_lock=!0,null===t!=(null===e)&&(console.warn(\"Dygraph.resize() should be called with zero parameters or two non-NULL parameters. Pretending it was zero.\"),t=e=null);var a=this.width_,i=this.height_;t?(this.maindiv_.style.width=t+\"px\",this.maindiv_.style.height=e+\"px\",this.width_=t,this.height_=e):(this.width_=this.maindiv_.clientWidth,this.height_=this.maindiv_.clientHeight),a==this.width_&&i==this.height_||(this.resizeElements_(),this.predraw_()),this.resize_lock=!1}},Q.prototype.adjustRoll=function(t){this.rollPeriod_=t,this.predraw_()},Q.prototype.visibility=function(){for(this.getOption(\"visibility\")||(this.attrs_.visibility=[]);this.getOption(\"visibility\").length<this.numColumns()-1;)this.attrs_.visibility.push(!0);return this.getOption(\"visibility\")},Q.prototype.setVisibility=function(t,e){var a=this.visibility(),i=!1;if(Array.isArray(t)||(null!==t&&\"object\"==typeof t?i=!0:t=[t]),i)for(var n in t)t.hasOwnProperty(n)&&(n<0||n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]);else for(var n=0;n<t.length;n++)\"boolean\"==typeof t[n]?n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]:t[n]<0||t[n]>=a.length?console.warn(\"Invalid series number in setVisibility: \"+t[n]):a[t[n]]=e;this.predraw_()},Q.prototype.size=function(){return{width:this.width_,height:this.height_}},Q.prototype.setAnnotations=function(t,e){if(this.annotations_=t,!this.layout_)return void console.warn(\"Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html\");this.layout_.setAnnotations(this.annotations_),e||this.predraw_()},Q.prototype.annotations=function(){return this.annotations_},Q.prototype.getLabels=function(){var t=this.attr_(\"labels\");return t?t.slice():null},Q.prototype.indexFromSetName=function(t){return this.setIndexByName_[t]},Q.prototype.getRowForX=function(t){for(var e=0,a=this.numRows()-1;e<=a;){var i=a+e>>1,n=this.getValue(i,0);if(n<t)e=i+1;else if(n>t)a=i-1;else{if(e==i)return i;a=i}}return null},Q.prototype.ready=function(t){this.is_initial_draw_?this.readyFns_.push(t):t.call(this,this)},Q.prototype.addAndTrackEvent=function(t,e,a){x.addEvent(t,e,a),this.registeredEvents_.push({elem:t,type:e,fn:a})},Q.prototype.removeTrackedEvents_=function(){if(this.registeredEvents_)for(var t=0;t<this.registeredEvents_.length;t++){var e=this.registeredEvents_[t];x.removeEvent(e.elem,e.type,e.fn)}this.registeredEvents_=[]},Q.PLUGINS=[U.default,X.default,j.default,Z.default,H.default,G.default],Q.GVizChart=q.default,Q.DASHED_LINE=x.DASHED_LINE,Q.DOT_DASH_LINE=x.DOT_DASH_LINE,Q.dateAxisLabelFormatter=x.dateAxisLabelFormatter,Q.toRGB_=x.toRGB_,Q.findPos=x.findPos,Q.pageX=x.pageX,Q.pageY=x.pageY,Q.dateString_=x.dateString_,Q.defaultInteractionModel=f.default.defaultModel,Q.nonInteractiveModel=Q.nonInteractiveModel_=f.default.nonInteractiveModel_,Q.Circles=x.Circles,Q.Plugins={Legend:U.default,Axes:X.default,Annotations:H.default,ChartLabels:Z.default,Grid:G.default,RangeSelector:j.default},Q.DataHandlers={DefaultHandler:E.default,BarsHandler:R.default,CustomBarsHandler:P.default,DefaultFractionHandler:M.default,ErrorBarsHandler:T.default,FractionsBarsHandler:F.default},Q.startPan=f.default.startPan,Q.startZoom=f.default.startZoom,Q.movePan=f.default.movePan,Q.moveZoom=f.default.moveZoom,Q.endPan=f.default.endPan,Q.endZoom=f.default.endZoom,Q.numericLinearTicks=_.numericLinearTicks,Q.numericTicks=_.numericTicks,Q.dateTicker=_.dateTicker,Q.Granularity=_.Granularity,Q.getDateAxis=_.getDateAxis,Q.floatFormat=x.floatFormat,a.default=Q,e.exports=a.default}).call(this,t(\"_process\"))},{\"./datahandler/bars\":5,\"./datahandler/bars-custom\":2,\"./datahandler/bars-error\":3,\"./datahandler/bars-fractions\":4,\"./datahandler/default\":8,\"./datahandler/default-fractions\":7,\"./dygraph-canvas\":9,\"./dygraph-default-attrs\":10,\"./dygraph-gviz\":11,\"./dygraph-interaction-model\":12,\"./dygraph-layout\":13,\"./dygraph-options\":15,\"./dygraph-options-reference\":14,\"./dygraph-tickers\":16,\"./dygraph-utils\":17,\"./iframe-tarp\":19,\"./plugins/annotations\":20,\"./plugins/axes\":21,\"./plugins/chart-labels\":22,\"./plugins/grid\":23,\"./plugins/legend\":24,\"./plugins/range-selector\":25,_process:1}],19:[function(t,e,a){\"use strict\";function i(){this.tarps=[]}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n);i.prototype.cover=function(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e<t.length;e++){var a=t[e],i=r.findPos(a),n=i.x,o=i.y,s=a.offsetWidth,l=a.offsetHeight,h=document.createElement(\"div\");h.style.position=\"absolute\",h.style.left=n+\"px\",h.style.top=o+\"px\",h.style.width=s+\"px\",h.style.height=l+\"px\",h.style.zIndex=999,document.body.appendChild(h),this.tarps.push(h)}},i.prototype.uncover=function(){for(var t=0;t<this.tarps.length;t++)this.tarps[t].parentNode.removeChild(this.tarps[t]);this.tarps=[]},a.default=i,e.exports=a.default},{\"./dygraph-utils\":17}],20:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.annotations_=[]};i.prototype.toString=function(){return\"Annotations Plugin\"},i.prototype.activate=function(t){return{clearChart:this.clearChart,didDrawChart:this.didDrawChart}},i.prototype.detachLabels=function(){for(var t=0;t<this.annotations_.length;t++){var e=this.annotations_[t];e.parentNode&&e.parentNode.removeChild(e),this.annotations_[t]=null}this.annotations_=[]},i.prototype.clearChart=function(t){this.detachLabels()},i.prototype.didDrawChart=function(t){var e=t.dygraph,a=e.layout_.annotated_points;if(a&&0!==a.length)for(var i=t.canvas.parentNode,n=function(t,a,i){return function(n){var r=i.annotation;r.hasOwnProperty(t)?r[t](r,i,e,n):e.getOption(a)&&e.getOption(a)(r,i,e,n)}},r=t.dygraph.getArea(),o={},s=0;s<a.length;s++){var l=a[s];if(!(l.canvasx<r.x||l.canvasx>r.x+r.w||l.canvasy<r.y||l.canvasy>r.y+r.h)){var h=l.annotation,u=6;h.hasOwnProperty(\"tickHeight\")&&(u=h.tickHeight);var d=document.createElement(\"div\");d.style.fontSize=e.getOption(\"axisLabelFontSize\")+\"px\"\n;var c=\"dygraph-annotation\";h.hasOwnProperty(\"icon\")||(c+=\" dygraphDefaultAnnotation dygraph-default-annotation\"),h.hasOwnProperty(\"cssClass\")&&(c+=\" \"+h.cssClass),d.className=c;var p=h.hasOwnProperty(\"width\")?h.width:16,g=h.hasOwnProperty(\"height\")?h.height:16;if(h.hasOwnProperty(\"icon\")){var f=document.createElement(\"img\");f.src=h.icon,f.width=p,f.height=g,d.appendChild(f)}else l.annotation.hasOwnProperty(\"shortText\")&&d.appendChild(document.createTextNode(l.annotation.shortText));var v=l.canvasx-p/2;d.style.left=v+\"px\";var _=0;if(h.attachAtBottom){var y=r.y+r.h-g-u;o[v]?y-=o[v]:o[v]=0,o[v]+=u+g,_=y}else _=l.canvasy-g-u;d.style.top=_+\"px\",d.style.width=p+\"px\",d.style.height=g+\"px\",d.title=l.annotation.text,d.style.color=e.colorsMap_[l.name],d.style.borderColor=e.colorsMap_[l.name],h.div=d,e.addAndTrackEvent(d,\"click\",n(\"clickHandler\",\"annotationClickHandler\",l)),e.addAndTrackEvent(d,\"mouseover\",n(\"mouseOverHandler\",\"annotationMouseOverHandler\",l)),e.addAndTrackEvent(d,\"mouseout\",n(\"mouseOutHandler\",\"annotationMouseOutHandler\",l)),e.addAndTrackEvent(d,\"dblclick\",n(\"dblClickHandler\",\"annotationDblClickHandler\",l)),i.appendChild(d),this.annotations_.push(d);var x=t.drawingContext;if(x.save(),x.strokeStyle=h.hasOwnProperty(\"tickColor\")?h.tickColor:e.colorsMap_[l.name],x.lineWidth=h.hasOwnProperty(\"tickWidth\")?h.tickWidth:e.getOption(\"strokeWidth\"),x.beginPath(),h.attachAtBottom){var y=_+g;x.moveTo(l.canvasx,y),x.lineTo(l.canvasx,y+u)}else x.moveTo(l.canvasx,l.canvasy),x.lineTo(l.canvasx,l.canvasy-2-u);x.closePath(),x.stroke(),x.restore()}}},i.prototype.destroy=function(){this.detachLabels()},a.default=i,e.exports=a.default},{}],21:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"../dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(){this.xlabels_=[],this.ylabels_=[]};r.prototype.toString=function(){return\"Axes Plugin\"},r.prototype.activate=function(t){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},r.prototype.layout=function(t){var e=t.dygraph;if(e.getOptionForAxis(\"drawAxis\",\"y\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y\")+2*e.getOptionForAxis(\"axisTickSize\",\"y\");t.reserveSpaceLeft(a)}if(e.getOptionForAxis(\"drawAxis\",\"x\")){var i;i=e.getOption(\"xAxisHeight\")?e.getOption(\"xAxisHeight\"):e.getOptionForAxis(\"axisLabelFontSize\",\"x\")+2*e.getOptionForAxis(\"axisTickSize\",\"x\"),t.reserveSpaceBottom(i)}if(2==e.numAxes()){if(e.getOptionForAxis(\"drawAxis\",\"y2\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y2\")+2*e.getOptionForAxis(\"axisTickSize\",\"y2\");t.reserveSpaceRight(a)}}else e.numAxes()>2&&e.error(\"Only two y-axes are supported at this time. (Trying to use \"+e.numAxes()+\")\")},r.prototype.detachLabels=function(){function t(t){for(var e=0;e<t.length;e++){var a=t[e];a.parentNode&&a.parentNode.removeChild(a)}}t(this.xlabels_),t(this.ylabels_),this.xlabels_=[],this.ylabels_=[]},r.prototype.clearChart=function(t){this.detachLabels()},r.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i=this,r=t.dygraph;if(r.getOptionForAxis(\"drawAxis\",\"x\")||r.getOptionForAxis(\"drawAxis\",\"y\")||r.getOptionForAxis(\"drawAxis\",\"y2\")){var o,s,l,h=t.drawingContext,u=t.canvas.parentNode,d=r.width_,c=r.height_,p=function(t){return{position:\"absolute\",fontSize:r.getOptionForAxis(\"axisLabelFontSize\",t)+\"px\",width:r.getOptionForAxis(\"axisLabelWidth\",t)+\"px\"}},g={x:p(\"x\"),y:p(\"y\"),y2:p(\"y2\")},f=function(t,e,a){var i=document.createElement(\"div\"),r=g[\"y2\"==a?\"y2\":e];n.update(i.style,r);var o=document.createElement(\"div\");return o.className=\"dygraph-axis-label dygraph-axis-label-\"+e+(a?\" dygraph-axis-label-\"+a:\"\"),o.innerHTML=t,i.appendChild(o),i};h.save();var v=r.layout_,_=t.dygraph.plotter_.area,y=function(t){return function(e){return r.getOptionForAxis(e,t)}};if(r.getOptionForAxis(\"drawAxis\",\"y\")){if(v.yticks&&v.yticks.length>0){var x=r.numAxes(),m=[y(\"y\"),y(\"y2\")];v.yticks.forEach(function(t){if(void 0!==t.label){s=_.x;var e=\"y1\",a=m[0];1==t.axis&&(s=_.x+_.w,-1,e=\"y2\",a=m[1]);var n=a(\"axisLabelFontSize\");l=_.y+t.pos*_.h,o=f(t.label,\"y\",2==x?e:null);var r=l-n/2;r<0&&(r=0),r+n+3>c?o.style.bottom=\"0\":o.style.top=r+\"px\",0===t.axis?(o.style.left=_.x-a(\"axisLabelWidth\")-a(\"axisTickSize\")+\"px\",o.style.textAlign=\"right\"):1==t.axis&&(o.style.left=_.x+_.w+a(\"axisTickSize\")+\"px\",o.style.textAlign=\"left\"),o.style.width=a(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.ylabels_.push(o)}});var b=this.ylabels_[0],w=r.getOptionForAxis(\"axisLabelFontSize\",\"y\");parseInt(b.style.top,10)+w>c-w&&(b.style.top=parseInt(b.style.top,10)-w/2+\"px\")}var A;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentXCoord(0);(O>1||O<0||isNaN(O))&&(O=0),A=e(_.x+O*_.w)}else A=e(_.x);h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y\"),h.beginPath(),h.moveTo(A,a(_.y)),h.lineTo(A,a(_.y+_.h)),h.closePath(),h.stroke(),2==r.numAxes()&&(h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y2\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y2\"),h.beginPath(),h.moveTo(a(_.x+_.w),a(_.y)),h.lineTo(a(_.x+_.w),a(_.y+_.h)),h.closePath(),h.stroke())}if(r.getOptionForAxis(\"drawAxis\",\"x\")){if(v.xticks){var D=y(\"x\");v.xticks.forEach(function(t){if(void 0!==t.label){s=_.x+t.pos*_.w,l=_.y+_.h,o=f(t.label,\"x\"),o.style.textAlign=\"center\",o.style.top=l+D(\"axisTickSize\")+\"px\";var e=s-D(\"axisLabelWidth\")/2;e+D(\"axisLabelWidth\")>d&&(e=d-D(\"axisLabelWidth\"),o.style.textAlign=\"right\"),e<0&&(e=0,o.style.textAlign=\"left\"),o.style.left=e+\"px\",o.style.width=D(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.xlabels_.push(o)}})}h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"x\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"x\"),h.beginPath();var E;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentYCoord(0,0);(O>1||O<0)&&(O=1),E=a(_.y+O*_.h)}else E=a(_.y+_.h);h.moveTo(e(_.x),E),h.lineTo(e(_.x+_.w),E),h.closePath(),h.stroke()}h.restore()}},a.default=r,e.exports=a.default},{\"../dygraph-utils\":17}],22:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};i.prototype.toString=function(){return\"ChartLabels Plugin\"},i.prototype.activate=function(t){return{layout:this.layout,didDrawChart:this.didDrawChart}};var n=function(t){var e=document.createElement(\"div\");return e.style.position=\"absolute\",e.style.left=t.x+\"px\",e.style.top=t.y+\"px\",e.style.width=t.w+\"px\",e.style.height=t.h+\"px\",e};i.prototype.detachLabels_=function(){for(var t=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],e=0;e<t.length;e++){var a=t[e];a&&(a.parentNode&&a.parentNode.removeChild(a))}this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};var r=function(t,e,a,i,n){var r=document.createElement(\"div\");r.style.position=\"absolute\",r.style.left=1==a?\"0px\":e.x+\"px\",r.style.top=e.y+\"px\",r.style.width=e.w+\"px\",r.style.height=e.h+\"px\",r.style.fontSize=t.getOption(\"yLabelWidth\")-2+\"px\";var o=document.createElement(\"div\");o.style.position=\"absolute\",o.style.width=e.h+\"px\",o.style.height=e.w+\"px\",o.style.top=e.h/2-e.w/2+\"px\",o.style.left=e.w/2-e.h/2+\"px\",o.className=\"dygraph-label-rotate-\"+(1==a?\"right\":\"left\");var s=document.createElement(\"div\");return s.className=i,s.innerHTML=n,o.appendChild(s),r.appendChild(o),r};i.prototype.layout=function(t){this.detachLabels_();var e=t.dygraph,a=t.chart_div;if(e.getOption(\"title\")){var i=t.reserveSpaceTop(e.getOption(\"titleHeight\"));this.title_div_=n(i),this.title_div_.style.fontSize=e.getOption(\"titleHeight\")-8+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-title\",o.innerHTML=e.getOption(\"title\"),this.title_div_.appendChild(o),a.appendChild(this.title_div_)}if(e.getOption(\"xlabel\")){var s=t.reserveSpaceBottom(e.getOption(\"xLabelHeight\"));this.xlabel_div_=n(s),this.xlabel_div_.style.fontSize=e.getOption(\"xLabelHeight\")-2+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-xlabel\",o.innerHTML=e.getOption(\"xlabel\"),this.xlabel_div_.appendChild(o),a.appendChild(this.xlabel_div_)}if(e.getOption(\"ylabel\")){var l=t.reserveSpaceLeft(0);this.ylabel_div_=r(e,l,1,\"dygraph-label dygraph-ylabel\",e.getOption(\"ylabel\")),a.appendChild(this.ylabel_div_)}if(e.getOption(\"y2label\")&&2==e.numAxes()){var h=t.reserveSpaceRight(0);this.y2label_div_=r(e,h,2,\"dygraph-label dygraph-y2label\",e.getOption(\"y2label\")),a.appendChild(this.y2label_div_)}},i.prototype.didDrawChart=function(t){var e=t.dygraph;this.title_div_&&(this.title_div_.children[0].innerHTML=e.getOption(\"title\")),this.xlabel_div_&&(this.xlabel_div_.children[0].innerHTML=e.getOption(\"xlabel\")),this.ylabel_div_&&(this.ylabel_div_.children[0].children[0].innerHTML=e.getOption(\"ylabel\")),this.y2label_div_&&(this.y2label_div_.children[0].children[0].innerHTML=e.getOption(\"y2label\"))},i.prototype.clearChart=function(){},i.prototype.destroy=function(){this.detachLabels_()},a.default=i,e.exports=a.default},{}],23:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){};i.prototype.toString=function(){return\"Gridline Plugin\"},i.prototype.activate=function(t){return{willDrawChart:this.willDrawChart}},i.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i,n,r,o,s=t.dygraph,l=t.drawingContext,h=s.layout_,u=t.dygraph.plotter_.area;if(s.getOptionForAxis(\"drawGrid\",\"y\")){for(var d=[\"y\",\"y2\"],c=[],p=[],g=[],f=[],v=[],r=0;r<d.length;r++)g[r]=s.getOptionForAxis(\"drawGrid\",d[r]),g[r]&&(c[r]=s.getOptionForAxis(\"gridLineColor\",d[r]),p[r]=s.getOptionForAxis(\"gridLineWidth\",d[r]),v[r]=s.getOptionForAxis(\"gridLinePattern\",d[r]),f[r]=v[r]&&v[r].length>=2);o=h.yticks,l.save(),o.forEach(function(t){if(t.has_tick){var r=t.axis;g[r]&&(l.save(),f[r]&&l.setLineDash&&l.setLineDash(v[r]),l.strokeStyle=c[r],l.lineWidth=p[r],i=e(u.x),n=a(u.y+t.pos*u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i+u.w,n),l.stroke(),l.restore())}}),l.restore()}if(s.getOptionForAxis(\"drawGrid\",\"x\")){o=h.xticks,l.save();var v=s.getOptionForAxis(\"gridLinePattern\",\"x\"),f=v&&v.length>=2;f&&l.setLineDash&&l.setLineDash(v),l.strokeStyle=s.getOptionForAxis(\"gridLineColor\",\"x\"),l.lineWidth=s.getOptionForAxis(\"gridLineWidth\",\"x\"),o.forEach(function(t){t.has_tick&&(i=e(u.x+t.pos*u.w),n=a(u.y+u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i,u.y),l.closePath(),l.stroke())}),f&&l.setLineDash&&l.setLineDash([]),l.restore()}},i.prototype.destroy=function(){},a.default=i,e.exports=a.default},{}],24:[function(t,e,a){\"use strict\";function i(t,e,a){if(!t||t.length<=1)return'<div class=\"dygraph-legend-line\" style=\"border-bottom-color: '+e+';\"></div>';var i,n,r,o,s,l=0,h=0,u=[];for(i=0;i<=t.length;i++)l+=t[i%t.length];if((s=Math.floor(a/(l-t[0])))>1){for(i=0;i<t.length;i++)u[i]=t[i]/a;h=u.length}else{for(s=1,i=0;i<t.length;i++)u[i]=t[i]/l;h=u.length+1}var d=\"\";for(n=0;n<s;n++)for(i=0;i<h;i+=2)r=u[i%u.length],o=i<t.length?u[(i+1)%u.length]:0,d+='<div class=\"dygraph-legend-dash\" style=\"margin-right: '+o+\"em; padding-left: \"+r+'em;\"></div>';return d}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=function(){this.legend_div_=null,this.is_generated_div_=!1};o.prototype.toString=function(){return\"Legend Plugin\"},o.prototype.activate=function(t){var e,a=t.getOption(\"labelsDiv\");return a&&null!==a?e=\"string\"==typeof a||a instanceof String?document.getElementById(a):a:(e=document.createElement(\"div\"),e.className=\"dygraph-legend\",t.graphDiv.appendChild(e),this.is_generated_div_=!0),this.legend_div_=e,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}};var s=function(t){var e=document.createElement(\"span\");e.setAttribute(\"style\",\"margin: 0; padding: 0 0 0 1em; border: 0;\"),t.appendChild(e);var a=e.offsetWidth;return t.removeChild(e),a},l=function(t){return t.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};o.prototype.select=function(t){var e=t.selectedX,a=t.selectedPoints,i=t.selectedRow,n=t.dygraph.getOption(\"legend\");if(\"never\"===n)return void(this.legend_div_.style.display=\"none\");if(\"follow\"===n){var r=t.dygraph.plotter_.area,s=this.legend_div_.offsetWidth,l=t.dygraph.getOptionForAxis(\"axisLabelWidth\",\"y\"),h=a[0].x*r.w+50,u=a[0].y*r.h-50;h+s+1>r.w&&(h=h-100-s-(l-r.x)),t.dygraph.graphDiv.appendChild(this.legend_div_),this.legend_div_.style.left=l+h+\"px\",this.legend_div_.style.top=u+\"px\"}var d=o.generateLegendHTML(t.dygraph,e,a,this.one_em_width_,i);this.legend_div_.innerHTML=d,this.legend_div_.style.display=\"\"},o.prototype.deselect=function(t){\"always\"!==t.dygraph.getOption(\"legend\")&&(this.legend_div_.style.display=\"none\");var e=s(this.legend_div_);this.one_em_width_=e;var a=o.generateLegendHTML(t.dygraph,void 0,void 0,e,null);this.legend_div_.innerHTML=a},o.prototype.didDrawChart=function(t){this.deselect(t)},o.prototype.predraw=function(t){if(this.is_generated_div_){t.dygraph.graphDiv.appendChild(this.legend_div_);var e=t.dygraph.getArea(),a=this.legend_div_.offsetWidth;this.legend_div_.style.left=e.x+e.w-a-1+\"px\",this.legend_div_.style.top=e.y+\"px\"}},o.prototype.destroy=function(){this.legend_div_=null},o.generateLegendHTML=function(t,e,a,n,s){var h={dygraph:t,x:e,series:[]},u={},d=t.getLabels();if(d)for(var c=1;c<d.length;c++){var p=t.getPropertiesForSeries(d[c]),g=t.getOption(\"strokePattern\",d[c]),f={dashHTML:i(g,p.color,n),label:d[c],labelHTML:l(d[c]),isVisible:p.visible,color:p.color};h.series.push(f),u[d[c]]=f}if(void 0!==e){var v=t.optionsViewForAxis_(\"x\"),_=v(\"valueFormatter\");h.xHTML=_.call(t,e,v,d[0],t,s,0);for(var y=[],x=t.numAxes(),c=0;c<x;c++)y[c]=t.optionsViewForAxis_(\"y\"+(c?1+c:\"\"));var m=t.getOption(\"labelsShowZeroValues\"),b=t.getHighlightSeries();for(c=0;c<a.length;c++){var w=a[c],f=u[w.name];if(f.y=w.yval,0===w.yval&&!m||isNaN(w.canvasy))f.isVisible=!1;else{var p=t.getPropertiesForSeries(w.name),A=y[p.axis-1],O=A(\"valueFormatter\"),D=O.call(t,w.yval,A,w.name,t,s,d.indexOf(w.name));r.update(f,{yHTML:D}),w.name==b&&(f.isHighlighted=!0)}}}return(t.getOption(\"legendFormatter\")||o.defaultFormatter).call(t,h)},o.defaultFormatter=function(t){var e=t.dygraph;if(!0!==e.getOption(\"showLabelsOnHighlight\"))return\"\";var a,i=e.getOption(\"labelsSeparateLines\");if(void 0===t.x){if(\"always\"!=e.getOption(\"legend\"))return\"\";a=\"\";for(var n=0;n<t.series.length;n++){var r=t.series[n];r.isVisible&&(\"\"!==a&&(a+=i?\"<br/>\":\" \"),a+=\"<span style='font-weight: bold; color: \"+r.color+\";'>\"+r.dashHTML+\" \"+r.labelHTML+\"</span>\")}return a}a=t.xHTML+\":\";for(var n=0;n<t.series.length;n++){var r=t.series[n];if(r.isVisible){i&&(a+=\"<br>\");a+=\"<span\"+(r.isHighlighted?' class=\"highlight\"':\"\")+\"> <b><span style='color: \"+r.color+\";'>\"+r.labelHTML+\"</span></b>:&#160;\"+r.yHTML+\"</span>\"}}return a},a.default=o,e.exports=a.default},{\"../dygraph-utils\":17}],25:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=t(\"../dygraph-interaction-model\"),s=i(o),l=t(\"../iframe-tarp\"),h=i(l),u=function(){this.hasTouchInterface_=\"undefined\"!=typeof TouchEvent,this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};u.prototype.toString=function(){return\"RangeSelector Plugin\"},u.prototype.activate=function(t){return this.dygraph_=t,this.getOption_(\"showRangeSelector\")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},u.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null},u.prototype.getOption_=function(t,e){return this.dygraph_.getOption(t,e)},u.prototype.setDefaultOption_=function(t,e){this.dygraph_.attrs_[t]=e},u.prototype.createInterface_=function(){this.createCanvases_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_(\"animatedZooms\")&&(console.warn(\"Animated zooms and range selector are not compatible; disabling animatedZooms.\"),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},u.prototype.addToGraph_=function(){var t=this.graphDiv_=this.dygraph_.graphDiv;t.appendChild(this.bgcanvas_),t.appendChild(this.fgcanvas_),t.appendChild(this.leftZoomHandle_),t.appendChild(this.rightZoomHandle_)},u.prototype.removeFromGraph_=function(){var t=this.graphDiv_;t.removeChild(this.bgcanvas_),t.removeChild(this.fgcanvas_),t.removeChild(this.leftZoomHandle_),t.removeChild(this.rightZoomHandle_),this.graphDiv_=null},u.prototype.reserveSpace_=function(t){this.getOption_(\"showRangeSelector\")&&t.reserveSpaceBottom(this.getOption_(\"rangeSelectorHeight\")+4)},u.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},u.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},u.prototype.updateVisibility_=function(){var t=this.getOption_(\"showRangeSelector\");if(t)this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_();else if(this.graphDiv_){this.removeFromGraph_();var e=this.dygraph_;setTimeout(function(){e.width_=0,e.resize()},1)}return t},u.prototype.resize_=function(){function t(t,e,a,i){var n=i||r.getContextPixelRatio(e);t.style.top=a.y+\"px\",t.style.left=a.x+\"px\",t.width=a.w*n,t.height=a.h*n,t.style.width=a.w+\"px\",t.style.height=a.h+\"px\",1!=n&&e.scale(n,n)}var e=this.dygraph_.layout_.getPlotArea(),a=0;this.dygraph_.getOptionForAxis(\"drawAxis\",\"x\")&&(a=this.getOption_(\"xAxisHeight\")||this.getOption_(\"axisLabelFontSize\")+2*this.getOption_(\"axisTickSize\")),this.canvasRect_={x:e.x,y:e.y+e.h+a+4,w:e.w,h:this.getOption_(\"rangeSelectorHeight\")};var i=this.dygraph_.getNumericOption(\"pixelRatio\");t(this.bgcanvas_,this.bgcanvas_ctx_,this.canvasRect_,i),t(this.fgcanvas_,this.fgcanvas_ctx_,this.canvasRect_,i)},u.prototype.createCanvases_=function(){this.bgcanvas_=r.createCanvas(),this.bgcanvas_.className=\"dygraph-rangesel-bgcanvas\",this.bgcanvas_.style.position=\"absolute\",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=r.getContext(this.bgcanvas_),this.fgcanvas_=r.createCanvas(),this.fgcanvas_.className=\"dygraph-rangesel-fgcanvas\",this.fgcanvas_.style.position=\"absolute\",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor=\"default\",this.fgcanvas_ctx_=r.getContext(this.fgcanvas_)},u.prototype.createZoomHandles_=function(){var t=new Image;t.className=\"dygraph-rangesel-zoomhandle\",t.style.position=\"absolute\",t.style.zIndex=10,t.style.visibility=\"hidden\",t.style.cursor=\"col-resize\",t.width=9,t.height=16,t.src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=\",this.isMobileDevice_&&(t.width*=2,t.height*=2),this.leftZoomHandle_=t,this.rightZoomHandle_=t.cloneNode(!1)},u.prototype.initInteraction_=function(){var t,e,a,i,n,o,l,u,d,c,p,g,f,v,_=this,y=document,x=0,m=null,b=!1,w=!1,A=!this.isMobileDevice_,O=new h.default;t=function(t){var e=_.dygraph_.xAxisExtremes(),a=(e[1]-e[0])/_.canvasRect_.w;return[e[0]+(t.leftHandlePos-_.canvasRect_.x)*a,e[0]+(t.rightHandlePos-_.canvasRect_.x)*a]},e=function(t){return r.cancelEvent(t),b=!0,x=t.clientX,m=t.target?t.target:t.srcElement,\"mousedown\"!==t.type&&\"dragstart\"!==t.type||(r.addEvent(y,\"mousemove\",a),r.addEvent(y,\"mouseup\",i)),_.fgcanvas_.style.cursor=\"col-resize\",O.cover(),!0},a=function(t){if(!b)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a,i=_.getZoomHandleStatus_();m==_.leftZoomHandle_?(a=i.leftHandlePos+e,a=Math.min(a,i.rightHandlePos-m.width-3),a=Math.max(a,_.canvasRect_.x)):(a=i.rightHandlePos+e,a=Math.min(a,_.canvasRect_.x+_.canvasRect_.w),a=Math.max(a,i.leftHandlePos+m.width+3));var o=m.width/2;return m.style.left=a-o+\"px\",_.drawInteractiveLayer_(),A&&n(),!0},i=function(t){return!!b&&(b=!1,O.uncover(),r.removeEvent(y,\"mousemove\",a),r.removeEvent(y,\"mouseup\",i),_.fgcanvas_.style.cursor=\"default\",A||n(),!0)},n=function(){try{var e=_.getZoomHandleStatus_();if(_.isChangingRange_=!0,e.isZoomed){var a=t(e);_.dygraph_.doZoomXDates_(a[0],a[1])}else _.dygraph_.resetZoom()}finally{_.isChangingRange_=!1}},o=function(t){var e=_.leftZoomHandle_.getBoundingClientRect(),a=e.left+e.width/2;e=_.rightZoomHandle_.getBoundingClientRect();var i=e.left+e.width/2;return t.clientX>a&&t.clientX<i},l=function(t){return!(w||!o(t)||!_.getZoomHandleStatus_().isZoomed)&&(r.cancelEvent(t),w=!0,x=t.clientX,\"mousedown\"===t.type&&(r.addEvent(y,\"mousemove\",u),r.addEvent(y,\"mouseup\",d)),!0)},u=function(t){if(!w)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a=_.getZoomHandleStatus_(),i=a.leftHandlePos,n=a.rightHandlePos,o=n-i;i+e<=_.canvasRect_.x?(i=_.canvasRect_.x,n=i+o):n+e>=_.canvasRect_.x+_.canvasRect_.w?(n=_.canvasRect_.x+_.canvasRect_.w,i=n-o):(i+=e,n+=e);var s=_.leftZoomHandle_.width/2;return _.leftZoomHandle_.style.left=i-s+\"px\",_.rightZoomHandle_.style.left=n-s+\"px\",_.drawInteractiveLayer_(),A&&c(),!0},d=function(t){return!!w&&(w=!1,r.removeEvent(y,\"mousemove\",u),r.removeEvent(y,\"mouseup\",d),A||c(),!0)},c=function(){try{_.isChangingRange_=!0,_.dygraph_.dateWindow_=t(_.getZoomHandleStatus_()),_.dygraph_.drawGraph_(!1)}finally{_.isChangingRange_=!1}},p=function(t){if(!b&&!w){var e=o(t)?\"move\":\"default\";e!=_.fgcanvas_.style.cursor&&(_.fgcanvas_.style.cursor=e)}},g=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?e(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?a(t.targetTouches[0])&&r.cancelEvent(t):i(t)},f=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?l(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?u(t.targetTouches[0])&&r.cancelEvent(t):d(t)},v=function(t,e){for(var a=[\"touchstart\",\"touchend\",\"touchmove\",\"touchcancel\"],i=0;i<a.length;i++)_.dygraph_.addAndTrackEvent(t,a[i],e)},this.setDefaultOption_(\"interactionModel\",s.default.dragIsPanInteractionModel),this.setDefaultOption_(\"panEdgeFraction\",1e-4);var D=window.opera?\"mousedown\":\"dragstart\";this.dygraph_.addAndTrackEvent(this.leftZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.rightZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousedown\",l),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousemove\",p),this.hasTouchInterface_&&(v(this.leftZoomHandle_,g),v(this.rightZoomHandle_,g),v(this.fgcanvas_,f))},u.prototype.drawStaticLayer_=function(){var t=this.bgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);try{this.drawMiniPlot_()}catch(t){console.warn(t)}this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorBackgroundLineWidth\"),t.strokeStyle=this.getOption_(\"rangeSelectorBackgroundStrokeColor\"),t.beginPath(),t.moveTo(.5,.5),t.lineTo(.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,.5),t.stroke()},u.prototype.drawMiniPlot_=function(){var t=this.getOption_(\"rangeSelectorPlotFillColor\"),e=this.getOption_(\"rangeSelectorPlotFillGradientColor\"),a=this.getOption_(\"rangeSelectorPlotStrokeColor\");if(t||a){var i=this.getOption_(\"stepPlot\"),n=this.computeCombinedSeriesAndLimits_(),r=n.yMax-n.yMin,o=this.bgcanvas_ctx_,s=this.dygraph_.xAxisExtremes(),l=Math.max(s[1]-s[0],1e-30),h=(this.canvasRect_.w-.5)/l,u=(this.canvasRect_.h-.5)/r,d=this.canvasRect_.w-.5,c=this.canvasRect_.h-.5,p=null,g=null;o.beginPath(),o.moveTo(.5,c);for(var f=0;f<n.data.length;f++){var v=n.data[f],_=null!==v[0]?(v[0]-s[0])*h:NaN,y=null!==v[1]?c-(v[1]-n.yMin)*u:NaN;(i||null===p||Math.round(_)!=Math.round(p))&&(isFinite(_)&&isFinite(y)?(null===p?o.lineTo(_,c):i&&o.lineTo(_,g),o.lineTo(_,y),p=_,g=y):(null!==p&&(i?(o.lineTo(_,g),o.lineTo(_,c)):o.lineTo(p,c)),p=g=null))}if(o.lineTo(d,c),o.closePath(),t){var x=this.bgcanvas_ctx_.createLinearGradient(0,0,0,c);e&&x.addColorStop(0,e),x.addColorStop(1,t),this.bgcanvas_ctx_.fillStyle=x,o.fill()}a&&(this.bgcanvas_ctx_.strokeStyle=a,this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorPlotLineWidth\"),o.stroke())}},u.prototype.computeCombinedSeriesAndLimits_=function(){var t,e=this.dygraph_,a=this.getOption_(\"logscale\"),i=e.numColumns(),n=e.getLabels(),o=new Array(i),s=!1,l=e.visibility(),h=[];for(t=1;t<i;t++){var u=this.getOption_(\"showInRangeSelector\",n[t]);h.push(u),null!==u&&(s=!0)}if(s)for(t=1;t<i;t++)o[t]=h[t-1];else for(t=1;t<i;t++)o[t]=l[t-1];var d=[],c=e.dataHandler_,p=e.attributes_;for(t=1;t<e.numColumns();t++)if(o[t]){var g=c.extractSeries(e.rawData_,t,p);e.rollPeriod()>1&&(g=c.rollingAverage(g,e.rollPeriod(),p)),d.push(g)}var f=[];for(t=0;t<d[0].length;t++){for(var v=0,_=0,y=0;y<d.length;y++){var x=d[y][t][1];null===x||isNaN(x)||(_++,v+=x)}f.push([d[0][t][0],v/_])}var m=Number.MAX_VALUE,b=-Number.MAX_VALUE;for(t=0;t<f.length;t++){var w=f[t][1];null!==w&&isFinite(w)&&(!a||w>0)&&(m=Math.min(m,w),b=Math.max(b,w))}if(a)for(b=r.log10(b),b+=.25*b,m=r.log10(m),t=0;t<f.length;t++)f[t][1]=r.log10(f[t][1]);else{var A,O=b-m;A=O<=Number.MIN_VALUE?.25*b:.25*O,b+=A,m-=A}return{data:f,yMin:m,yMax:b}},u.prototype.placeZoomHandles_=function(){var t=this.dygraph_.xAxisExtremes(),e=this.dygraph_.xAxisRange(),a=t[1]-t[0],i=Math.max(0,(e[0]-t[0])/a),n=Math.max(0,(t[1]-e[1])/a),r=this.canvasRect_.x+this.canvasRect_.w*i,o=this.canvasRect_.x+this.canvasRect_.w*(1-n),s=Math.max(this.canvasRect_.y,this.canvasRect_.y+(this.canvasRect_.h-this.leftZoomHandle_.height)/2),l=this.leftZoomHandle_.width/2;this.leftZoomHandle_.style.left=r-l+\"px\",this.leftZoomHandle_.style.top=s+\"px\",this.rightZoomHandle_.style.left=o-l+\"px\",this.rightZoomHandle_.style.top=this.leftZoomHandle_.style.top,this.leftZoomHandle_.style.visibility=\"visible\",this.rightZoomHandle_.style.visibility=\"visible\"},u.prototype.drawInteractiveLayer_=function(){var t=this.fgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);var e=this.canvasRect_.w-1,a=this.canvasRect_.h-1,i=this.getZoomHandleStatus_();if(t.strokeStyle=this.getOption_(\"rangeSelectorForegroundStrokeColor\"),t.lineWidth=this.getOption_(\"rangeSelectorForegroundLineWidth\"),i.isZoomed){var n=Math.max(1,i.leftHandlePos-this.canvasRect_.x),r=Math.min(e,i.rightHandlePos-this.canvasRect_.x);t.fillStyle=\"rgba(240, 240, 240, \"+this.getOption_(\"rangeSelectorAlpha\").toString()+\")\",t.fillRect(0,0,n,this.canvasRect_.h),t.fillRect(r,0,this.canvasRect_.w-r,this.canvasRect_.h),t.beginPath(),t.moveTo(1,1),t.lineTo(n,1),t.lineTo(n,a),t.lineTo(r,a),t.lineTo(r,1),t.lineTo(e,1),t.stroke()}else t.beginPath(),t.moveTo(1,1),t.lineTo(1,a),t.lineTo(e,a),t.lineTo(e,1),t.stroke()},u.prototype.getZoomHandleStatus_=function(){var t=this.leftZoomHandle_.width/2,e=parseFloat(this.leftZoomHandle_.style.left)+t,a=parseFloat(this.rightZoomHandle_.style.left)+t;return{leftHandlePos:e,rightHandlePos:a,isZoomed:e-1>this.canvasRect_.x||a+1<this.canvasRect_.x+this.canvasRect_.w}},a.default=u,e.exports=a.default},{\"../dygraph-interaction-model\":12,\"../dygraph-utils\":17,\"../iframe-tarp\":19}]},{},[18])(18)});\n//# sourceMappingURL=dist/dygraph.min.js.map\n","import { ChartData, ChartMetadata } from \"../chart-types\"\nimport { seconds4human } from \"./seconds4human\"\n\nexport const LEGEND_BOTTOM_SINGLE_LINE_HEIGHT = 80\n\nexport const legendPluginModuleString = (withContext: boolean, chartMetadata: ChartMetadata) => {\n let str = \" \"\n let context = \"\"\n\n if (withContext && typeof chartMetadata.context === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n context = chartMetadata.context\n }\n\n if (typeof chartMetadata.plugin === \"string\" && chartMetadata.plugin !== \"\") {\n str = chartMetadata.plugin\n\n if (str.endsWith(\".plugin\")) {\n str = str.substring(0, str.length - 7)\n }\n\n if (typeof chartMetadata.module === \"string\" && chartMetadata.module !== \"\") {\n str += `:${chartMetadata.module}`\n }\n\n if (withContext && context !== \"\") {\n str += `, ${context}`\n }\n } else if (withContext && context !== \"\") {\n str = context\n }\n return str\n}\n\nexport const legendResolutionTooltip = (chartData: ChartData, chartMetadata: ChartMetadata) => {\n const collected = chartMetadata.update_every\n // todo if there's no data (but maybe there wont be situation like this), then use \"collected\"\n const viewed = chartData.view_update_every\n if (collected === viewed) {\n return `resolution ${seconds4human(collected)}`\n }\n\n return `resolution ${seconds4human(viewed)}, collected every ${seconds4human(collected)}`\n}\n\ntype GetNewSelectedDimensions = (arg: {\n allDimensions: string[],\n selectedDimensions: string[],\n clickedDimensionName: string,\n isModifierKeyPressed: boolean,\n}) => string[]\n\nexport const getNewSelectedDimensions: GetNewSelectedDimensions = ({\n allDimensions,\n selectedDimensions,\n clickedDimensionName,\n isModifierKeyPressed,\n}) => {\n // when selectedDimensions is empty, then all dimensions should be enabled\n // let's narrow this case now\n const enabledDimensions = selectedDimensions.length === 0 ? allDimensions : selectedDimensions\n const isCurrentlySelected = enabledDimensions.includes(clickedDimensionName)\n\n let newSelectedDimensions: string[]\n if (!isModifierKeyPressed\n && ((isCurrentlySelected && enabledDimensions.length > 1) || !isCurrentlySelected)\n ) {\n newSelectedDimensions = [clickedDimensionName]\n } else if (isCurrentlySelected) { // modifier key pressed\n newSelectedDimensions = enabledDimensions.filter(\n (dimension) => dimension !== clickedDimensionName,\n )\n } else { // modifier key pressed\n newSelectedDimensions = enabledDimensions.concat(clickedDimensionName)\n }\n\n if (newSelectedDimensions.length === allDimensions.length) {\n return []\n }\n return newSelectedDimensions\n}\n","/* eslint-disable comma-dangle */\n/* eslint-disable implicit-arrow-linebreak */\nimport { omit, pipe, mergeDeepLeft } from \"ramda\"\n\ntype HashParams = { [param: string]: string }\nconst fragmentParamsSeparatorRegEx = /[&;]/\nconst fragmentParamsSeparator = \";\"\n\nexport const getHashParams = (\n hash = decodeURIComponent(window.location.hash.substr(1))\n): HashParams => {\n if (hash.length === 0) {\n return {}\n }\n const params = hash.split(fragmentParamsSeparatorRegEx)\n const response = params.reduce((acc: HashParams, current) => {\n const parts = current.split(\"=\")\n const [param, value] = parts\n acc[param] = value\n return acc\n }, {})\n return response\n}\n\nexport const makeHashFromObject = (params: { [paramKey: string]: string }) => {\n const entries = Object.entries(params)\n if (entries.length === 0) {\n return \"\"\n }\n return entries\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join(fragmentParamsSeparator)\n}\n\nexport const getFilteredHash = (\n excludedParams: string[],\n hash = decodeURIComponent(window.location.hash.substr(1))\n) => {\n const filteredParams = omit(excludedParams, getHashParams(hash))\n return makeHashFromObject(filteredParams)\n}\n\nexport const getUniqueParamsHash = pipe(getHashParams, makeHashFromObject)\n\nexport const setHashParams = (params: { [paramKey: string]: string }) => {\n const allParams = getHashParams()\n const allParamsResult = mergeDeepLeft(params, allParams)\n window.history.replaceState(window.history.state, \"\", `#${makeHashFromObject(allParamsResult)}`)\n}\n\nexport const getHashParam = (\n param: string,\n hash = decodeURIComponent(window.location.hash.substr(1))\n): string => getHashParams(hash)[param]\n\nexport const hasHashParam = (\n param: string,\n hash = decodeURIComponent(window.location.hash.substr(1))\n): boolean => getHashParams(hash)[param] !== undefined\n\nexport const removeHashParams = (params: string[]) => {\n window.history.replaceState(window.history.state, \"\", `#${getFilteredHash(params)}`)\n}\n","export const isMainJs = process.env.REACT_APP_IS_MAIN_DASHBOARD\nexport const isTestingEnv = process.env.NODE_ENV === \"test\"\nexport const isDevelopmentEnv = process.env.NODE_ENV === \"development\"\n","export const storeKey = \"dashboard\"\n","import { createContext } from \"react\"\nimport {\n createDispatchHook, createSelectorHook, ReactReduxContextValue,\n useSelector as useSelectorOriginal,\n useDispatch as useDispatchOriginal,\n} from \"react-redux\"\n\nconst shouldUseDefaultContext = process.env.REACT_APP_SHOULD_USE_DEFAULT_CONTEXT\n\nexport const dashboardReduxContext = shouldUseDefaultContext\n ? undefined\n : createContext<ReactReduxContextValue>(undefined as any)\n\nexport const useSelector = dashboardReduxContext\n ? createSelectorHook(dashboardReduxContext)\n : useSelectorOriginal\nexport const useDispatch = dashboardReduxContext\n ? createDispatchHook(dashboardReduxContext)\n : useDispatchOriginal\n","import { createAction } from \"redux-act\"\n\n// slightly simplified version of the creator used in the cloud\n// we will unify it when some typing issues will be fixed (cloud version didn't warn on bad payload)\nexport const createRequestAction = <RequestT, SuccessT = any, FailureT = any>(name: string) => {\n const action = createAction<RequestT>(name.toUpperCase())\n\n return Object.assign(action, {\n request: action,\n success: createAction<SuccessT>(\n `${name.toUpperCase()}_SUCCESS`,\n (payload) => payload,\n (meta) => meta,\n ),\n failure: createAction<FailureT>(\n `${name.toUpperCase()}_FAILURE`,\n (payload) => payload,\n (meta) => ({\n ...meta,\n error: true,\n }),\n ),\n })\n}\n"],"sourceRoot":""} \ No newline at end of file