diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-07-20 04:50:01 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-07-20 04:50:01 +0000 |
commit | cd4377fab21e0f500bef7f06543fa848a039c1e0 (patch) | |
tree | ba00a55e430c052d6bed0b61c0f8bbe8ebedd313 /web/gui/v1/static/js/main.e248095a.chunk.js.map | |
parent | Releasing debian version 1.40.1-1. (diff) | |
download | netdata-cd4377fab21e0f500bef7f06543fa848a039c1e0.tar.xz netdata-cd4377fab21e0f500bef7f06543fa848a039c1e0.zip |
Merging upstream version 1.41.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/gui/v1/static/js/main.e248095a.chunk.js.map')
-rw-r--r-- | web/gui/v1/static/js/main.e248095a.chunk.js.map | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/web/gui/v1/static/js/main.e248095a.chunk.js.map b/web/gui/v1/static/js/main.e248095a.chunk.js.map new file mode 100644 index 00000000..d8ee7a72 --- /dev/null +++ b/web/gui/v1/static/js/main.e248095a.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["utils/units-conversion.ts","components/button/button.tsx","domains/chart/components/toolbox-button.tsx","domains/chart/components/resize-handler.tsx","domains/global/actions.ts","hooks/use-user-node-access.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","components/header/constants.js","main.js","domains/global/constants.ts","components/header/ACLK/use-cloud-connection-status.tsx","components/header/ACLK/cloud-connection-status-modal.tsx","components/header/ACLK/cloud-connection-status.tsx","utils/utils.ts","vendor/d3pie-0.2.1-netdata-3.js","components/header/ACLK/index.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","../public/lib/dygraph-c91c859.min.js","domains/chart/utils/legend-utils.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/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/dashboard/components/migration-modal/use-migration-modal.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/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/iframe.js","components/auth/signIn/useCheckSignInStatus.js","components/header/signIn/index.js","components/discover-cloud/cloudTab.js","components/discover-cloud/discoverCloudModal.js","components/discover-cloud/contents.js","components/discover-cloud/discoverCloudDrop.js","components/discover-cloud/discoverCloud.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/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/visitedNodes/styled.js","components/sidebar/space/visitedNodes/index.js","utils/truncateMiddle/index.js","components/sidebar/space/index.js","components/sidebar/index.js","components/layout/index.js","utils/map-theme.ts","domains/dashboard/components/migration-modal/migration-modal.js","domains/dashboard/components/migration-manager/migration-manager.tsx","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","components/auth/signIn/index.js","utils/hash-utils.ts","utils/post-message.ts","utils/env.ts","domains/dashboard/constants.ts","store/redux-separate-context.ts","utils/is-demo.ts","domains/global/selectors.ts","components/anchor/index.tsx","utils/createRequestAction.ts","domains/global/options.ts"],"names":["currentTemperatureSetting","currentSecondsAsTimeSetting","zeropad","x","seconds2time","seconds","maxTimeUnit","secondsReturn","Math","abs","days","floor","hours","minutes","daysString","hoursString","minutesString","secondsString","toFixed","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","twoFixed","multiplier","value","convertibleUnits","Celsius","Fahrenheit","check","convert","celsius","fahrenheit","milliseconds","microseconds","max","identity","unitsConversionCreator","keys","latest","globalReset","this","get","uuid","min","units","desiredUnits","commonUnitsName","switchUnitsCallback","temperatureSetting","secondsAsTimeSetting","undefined","newConvertFunction","tunits","tdivider","scalableUnitsGroup","Object","forEach","unit","unitDivider","commonUnitsKey","t","divider","commonUnits","console","log","toString","Button","React","ref","children","className","rest","type","classNames","ToolboxButton","iconType","onClick","onDoubleClick","onMouseDown","onTouchStart","popoverContent","popoverTitle","buttonRef","useRef","showHelp","useSelector","selectShowHelp","useEffect","current","window","$","popover","container","animation","html","trigger","placement","delay","show","NETDATA","options","show_help_delay_show_ms","hide","show_help_delay_hide_ms","title","content","LOCALSTORAGE_HEIGHT_KEY_PREFIX","ResizeHandler","chartContainerElement","chartUuid","heightId","isLegendOnBottom","useState","clientHeight","resizeHeight","setResizeHeight","dispatch","useDispatch","setResizeHeightAction","id","handleResize","useCallback","event","preventDefault","intialHeight","eventStartHeight","touches","clientY","setHeight","currentHeight","nextHeight","style","height","heightForPersistance","LEGEND_BOTTOM_SINGLE_LINE_HEIGHT","localStorage","setItem","onMouseMove","e","onTouchMove","document","addEventListener","onTouchEnd","removeEventListener","onMouseEnd","stopPropagation","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","setUserNodeAccess","useRequestRefreshOfAccessMessage","sendToChildIframe","SIGN_IN_IFRAME_ID","payload","useUserNodeAccessMessage","useListenToPostMessage","message","name2id","s","replace","initialState","commonColorsKeys","commonMin","commonMax","currentSelectionMasterId","globalPanAndZoom","defaultAfter","isMainJs","getInitialAfterFromWindow","globalChartUnderlay","hoveredX","hasWindowFocus","hasFocus","globalPause","spacePanelIsActive","spacePanelTransitionEndIsActive","registry","cloudBaseURL","hasFetchedInfo","hasFetchedHello","isHelloCallError","hostname","isCloudEnabled","isCloudAvailable","isAgentClaimed","isACLKAvailable","hasStartedInfo","isFetchingHello","fullInfoPayload","machineGuid","personGuid","registryMachines","registryMachinesArray","registryServer","snapshot","alarms","activeAlarms","hasStartedAlarms","alarm","chartsMetadata","isFetching","isFetchingError","data","optionsMergedWithLocalStorage","userNodeAccess","globalReducer","createReducer","getKeyForCommonColorsState","colorsAttribute","commonColorsAttribute","chartContext","hasCustomColors","length","hasLastOnly","array","last","createCommonColorsKeysSubstate","custom","split","init","shouldCopyTheme","assigned","available","themes","colors","on","state","dimensionNames","keyName","subState","currentlyAssignedNr","requestedDimensionsAssigned","mergeAll","filter","dimensionName","map","i","commonMinKey","charts","currentExtreme","values","commonMaxKey","isActive","after","before","masterID","warn","highlightMargin","resetPanAndZoom","hasFocusNow","forcePlay","stop_updates_when_focus_is_lost","utcOffset","request","success","failure","CLOUD_BASE_URL_DISABLED","fetchInfoAction","key","clearLocalStorage","getOptionsMergedWithLocalStorage","parsedData","dataKey","uncompressed","uncompress","JSON","parse","reduce","acc","obj","typeToClassName","left","reset","right","zoomIn","zoomOut","resize","lineChart","areaChart","noChart","loading","noData","Icon","initialSingleState","chartData","chartId","chartMetadata","chartPanAndZoom","fetchDataParams","isRemotelyControlled","viewRange","isFetchingData","isFetchDataFailure","isFetchDetailsFailure","isFetchingDetails","snapshotDataIsFetching","snapshotDataIsError","snapshotData","chartReducer","getSubstate","fetchDataAction","chart","fetchDataCancelAction","substate","useNewKeysOnlyIfDifferent","fetchDataForSnapshotAction","snapshotExportResetAction","pick","fetchChartAction","setChartPanAndZoomAction","shouldForceTimeRange","resetChartPanAndZoomAction","SYNC_PAN_AND_ZOOM","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","name","startsWith","merged","isEmpty","getAttributesDynamic","defaultAttributes","initialLegendRight","localeDateString","localeTimeString","updateLocaleFunctions","newLocaleDateString","newLocaleTimeString","netdataShowAlarms","netdataRegistry","netdataServer","netdataServerStatic","netdataCheckXSS","reduxStore","escapeUserInputHTML","setOption","getFromRegistry","prop","selectRegistry","getState","verifyURL","urlOptions","hash","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","location","len","p","decodeURIComponent","booleans","numeric","parseInt","origin","pathname","welcome","Date","now","hashUpdate","history","replaceState","netdataPanAndZoomCallback","status","netdataSnapshotData","updateUtcParam","netdataHighlightCallback","round","d1","d2","getElementById","innerHTML","seconds4human","tooltip","clearHighlight","showHighlight","localStorageTested","localStorageTest","Storage","removeItem","loadLocalStorage","ret","getItem","error","saveLocalStorage","getTheme","def","setTheme","netdataTheme","updateTheme","netdataShowHelp","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","encodeURIComponent","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","endsWith","lastIndexOf","headMain","head","generateHeadCharts","hcharts","hi","hlen","renderPage","div","pcent_width","sidebar","mainhead","main","hasChartsOnBottom","chartAdditionalHeight","menuid","icon","info","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","channel","tag_name","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","selectDefaultAfter","start_ms","selectGlobalPanAndZoom","Boolean","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","createSelectOption","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","includes","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","isDemo","onresizeCallback","update","resetDashboardOptions","selected_server_timezone","isProperTimezone","userSetServerTimezone","timezoneOption","netdataCallback","showSignInModal","explicitlySignIn","explicitlySignInAction","MASKED_DATA","INFO_POLLING_FREQUENCY","alarmStatuses","useCloudConnectionStatus","userStatus","nodeStatus","date","useMemo","header","strong","bullets","rel","href","CTA1","makeCloudConnectionStatusInfo","CloudConnectionStatusModal","closeModal","onRefresh","isCTA1Disabled","handleClickedCTA1","background","margin","onClose","padding","column","gap","as","bullet","data-testid","utmParameters","campaign","data-ga","disabled","textTransform","label","Text","sx","fontWeight","lineHeight","CloudConnectionStatus","selectUserNodeAccess","cloudEnabled","selectIsCloudEnabled","isModalOpen","setModalOpen","cloudConnectionStatusInfo","nodeLiveness","documentElement","openModal","flavour","isTimestamp","NETDATA_REGISTRY_SERVER","MS_IN_SECOND","getIframeSrc","path","utmUrlSuffix","getBoundingClientRect","obj1","obj2","equals","callAll","fns","arg","define","_uniqueIDCounter","defaultSettings","color","fontSize","font","subtitle","titleSubtitlePadding","canvasHeight","canvasWidth","pieInnerRadius","pieOuterRadius","sortOrder","ignoreSmallSegments","valueType","smallSegmentGrouping","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","misc","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","o","prototype","src","copy","copyIsArray","clone","arguments","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","parentNode","replacements","placeholder","d3pie","_setupData","_init","recreate","redraw","getOpenSegment","updateProp","propKey","oldVal","oldValue","dp","_getPercentage","totalPercentage","relativeAmount","currentScript","isTestingEnv","getDefaultServer","isDevelopmentEnv","RegExp","getPathFromScriptSource","cond","T","getElementsByTagName","alwaysEndWithSlash","pipe","concat","serverStatic","selectChartsState","selectSingleChartState","createSelector","_","chartsState","selectChartData","chartState","selectChartMetadataFromExplicitCall","selectChartMetadata","selectChartMetadataFromChartsCall","metadataFromAll","metadataFromSingleCall","selectIsFetchingDetails","makeSelectChartMetadataRequest","selectChartViewRange","selectChartIsFetchingData","selectChartFetchDataParams","selectResizeHeight","selectChartPanAndZoom","selectAmountOfFetchedCharts","some","hasCompletedFetching","selectNameOfAnyFetchingChart","isSupportingDateTimeFormat","navigator","language","narrowToDate","localeDateStringNative","localeTimeStringNative","xAxisTimeStringNative","localeMatcher","formatMatcher","weekday","year","month","day","dateFormat","locale","long","isTime","secs","hourCycle","dateStyle","timeStyle","getOptions","getTimezone","useDateTime","selectTimezoneSetting","selectUTCOffsetSetting","xAxisTimeString","xAxisDateString","showSignInModalAction","isSignedInAction","setOfflineAction","fallbackUpdateTimeInterval","panAndZoomDelay","totalSeconds","defaultOptions","hour","minute","second","and","strings","pop","join","module","exports","require","l","Error","code","u","1","v","g","f","run","clearTimeout","fun","nextTick","apply","browser","env","argv","versions","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","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","xval","yval","canvasx","canvasy","7","8","9","dygraph_","layout","elementContext","height_","width_","isCanvasSupported","area","getPlotArea","canvas_ctx_","beginPath","rect","clip","hidden_ctx_","clear","clearRect","render","_updatePoints","_renderLineChart","_getIteratorPredicate","_predicateThatSkipsEmptyPoints","_drawStyledLine","dygraph","getBooleanOption","setName","isArrayLike","createIterator","drawingContext","setLineDash","_drawSeries","_drawPointsOnLine","restore","strokeStyle","lineWidth","array_","end_","predicate_","start_","moveTo","lineTo","nextIdx_","next","hasNext","peek","stroke","setNames","colorsMap_","strokeWidth","axis","axisPropertiesForSeries","plotArea","seriesIndex","seriesCount","singleSeriesName","allSeriesPoints","_Plotters","linePlotter","_linePlotter","fillPlotter","_fillPlotter","errorPlotter","_errorPlotter","getNumericOption","Circles","DEFAULT","toRGB_","fillStyle","closePath","fill","_fastCanvasProxy","splice","_count","getLabels","visibility","getColors","A","minyval","yscale","O","D","E","L","S","P","C","M","FORCE_FAST_PROXY","N","F","isOK","k","y_stacked","10","highlightCircleSize","highlightSeriesOpts","highlightSeriesBackgroundAlpha","highlightSeriesBackgroundColor","labelsSeparateLines","labelsShowZeroValues","labelsKMB","labelsKMG2","showLabelsOnHighlight","digitsAfterDecimal","maxNumberWidth","sigFigs","strokeBorderWidth","strokeBorderColor","axisTickSize","axisLabelFontSize","rightGap","showRoller","xValueParser","delimiter","sigma","errorBars","fractions","wilsonInterval","customBars","fillGraph","fillAlpha","connectSeparatedPoints","stackedGraph","stackedGraphNaNFill","hideOverlayOnMouseOut","stepPlot","xRangePad","yRangePad","drawAxesAtZero","titleHeight","xLabelHeight","yLabelWidth","axisLineColor","axisLineWidth","gridLineWidth","axisLabelWidth","gridLineColor","interactionModel","defaultModel","animatedZooms","showRangeSelector","rangeSelectorHeight","rangeSelectorPlotStrokeColor","rangeSelectorPlotFillGradientColor","rangeSelectorPlotFillColor","rangeSelectorBackgroundStrokeColor","rangeSelectorBackgroundLineWidth","rangeSelectorPlotLineWidth","rangeSelectorForegroundStrokeColor","rangeSelectorForegroundLineWidth","rangeSelectorAlpha","showInRangeSelector","plotter","plugins","axes","pixelsPerLabel","axisLabelFormatter","dateAxisLabelFormatter","valueFormatter","dateValueFormatter","drawGrid","drawAxis","independentTicks","ticker","dateTicker","numberValueFormatter","numberAxisLabelFormatter","numericTicks","11","draw","date_graph","setSelection","getSelection","layout_","12","dragEndX","dragGetX_","dragEndY","dragGetY_","dragStartX","dragStartY","lastx_","treatMouseOpAsClick","regionWidth","regionHeight","isPanning","xAxisRange","getOptionForAxis","initialLeftmostDate","log10","dateRange","xUnitsPerPixel","plotter_","xAxisExtremes","toDomXCoord","toDataXCoord","boundedDates","axes_","extremeRange","toDomYCoord","toDataYCoord","boundedValues","is2DPan","yAxisRange","attributes_","getForAxis","initialTopValue","dragValueRange","unitsPerPixel","dateWindow_","LOG_SCALE","drawGraph_","endPan","maybeTreatMouseOpAsClick","startZoom","isZooming","zoomMoved","moveZoom","dragDirection","VERTICAL","HORIZONTAL","drawZoomRect_","prevDragDirection","prevEndX","prevEndY","getFunctionOption","MAX_VALUE","selPoints_","cancelable","point","cascadeEvents_","pts","endZoom","clearZoomRect_","getArea","doZoomX_","cancelNextDblclick","doZoomY_","startTouch","startTimeForDoubleTapMs","pageX","pageY","dataX","dataY","initialTouches","initialPinchCenter","touchDirections","initialRange","moveTouch","yAxisRanges","endTouch","changedTouches","getTime","doubleTapX","screenX","doubleTapY","screenY","resetZoom","findPos","canvas_","offsetWidth","offsetHeight","mousedown","button","initializeMouseDown","altKey","shiftKey","startPan","movePan","addAndTrackEvent","removeEvent","willDestroyContextMyself","touchstart","touchmove","touchend","dblclick","nonInteractiveModel_","mouseup","dragIsPanInteractionModel","mousemove","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","annotation","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","reverse","ceil","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","cancel","returnValue","hsvToRGB","pageXOffset","scrollLeft","pageYOffset","px","py","isValidPoint","floatFormat","hmsString_","dateString_","round_","dateParser","dateStrToMillis","updateDeep","Node","nodeName","isDateLike","createCanvas","getContextPixelRatio","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","Iterator","repeatAndCleanup","et","isPixelChangingOptionList","at","detectLineDelimiter","isNodeContainedBy","getComputedStyle","getContext","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","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","requestAnimFrame","annotationClickHandler","annotationDblClickHandler","annotationMouseOutHandler","annotationMouseOverHandler","clickCallback","drawCallback","drawHighlightPointCallback","drawPoints","drawPointCallback","highlightCallback","labelsDiv","panEdgeFraction","pixelsPerYLabel","pointClickCallback","pointSize","underlayCallback","unhighlightCallback","zoomCallback","it","18","Symbol","iterator","return","TypeError","R","H","Z","q","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_","dateWindow","annotations_","clientWidth","boundaryIds_","setIndexByName_","datasetIndex_","registeredEvents_","eventListeners_","createInterface_","plugins_","PLUGINS","plugin","activate","events","pluginOptions","createDragInterface_","defaultPrevented","propagationStopped","getPluginInstance_","isZoomed","attr_","getStringOption","optionsViewForAxis_","numRows","rawData_","yAxisExtremes","gatherDatasets_","rolledSeries_","extremes","computeYAxisRanges_","toDomCoords","toDataCoords","numColumns","getValue","textAlign","hidden_","createPlotKitCanvas_","resizeElements_","mouseEventElement_","createMouseEventElement_","mouseMoveHandler_","mouseMove_","mouseOutHandler_","fromElement","relatedTarget","toElement","mouseOut_","resizeHandler_","removeTrackedEvents_","hasChildNodes","firstChild","setColors_","colors_","getPropertiesForSeries","createRollInterface_","roller_","onchange","adjustRoll","tarp","cover","draggingDate","draggingValue","uncover","fillRect","currentZoomRectArgs_","doZoomXDates_","doAnimatedZoom","zoomAnimationFunction","clearSelection","eventToDomCoords","offsetX","offsetY","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_","canvas","readyFired_","detectTypeFromString_","setXAxisOptions_","parseArray_","parseDataTable_","getNumberOfColumns","getNumberOfRows","getColumnType","getColumnLabel","shortText","fromCharCode","getColumnRange","XMLHttpRequest","ActiveXObject","onreadystatechange","readyState","responseText","send","updateOptions","resize_lock","setVisibility","indexFromSetName","getRowForX","ready","elem","GVizChart","defaultInteractionModel","nonInteractiveModel","Plugins","Legend","Axes","Annotations","ChartLabels","Grid","RangeSelector","DataHandlers","DefaultHandler","BarsHandler","CustomBarsHandler","DefaultFractionHandler","ErrorBarsHandler","FractionsBarsHandler","19","tarps","zIndex","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","isVisible","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","cloneNode","leftHandlePos","rightHandlePos","clientX","srcElement","getZoomHandleStatus_","targetTouches","opera","drawMiniPlot_","computeCombinedSeriesAndLimits_","yMax","yMin","createLinearGradient","addColorStop","MIN_VALUE","legendPluginModuleString","withContext","legendResolutionTooltip","collected","viewed","view_update_every","getNewSelectedDimensions","newSelectedDimensions","allDimensions","clickedDimensionName","isModifierKeyPressed","enabledDimensions","isCurrentlySelected","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","empty","startWith","switchMap","subscribe","fillMissingData","nrOfPointsToFill","viewUpdateEvery","firstAddedTimestamp","emptyPoint","tail","nulls","addPointsDygraph","emptyArray","transformResults","shouldRevertFlip","dataResult","pointData","sum","Container","styled","getSizeBy","SideContent","ContentContainer","HeaderText","getColor","ContentText","TextSmall","UINotification","props","leftContent","rightContent","renderContent","createUINotification","NodeIconContainer","NotificationLink","toastOptions","toast","POSITION","BOTTOM_RIGHT","autoClose","pauseOnFocusLoss","showCloudInstallationProblemNotification","notificationComponent","showCloudConnectionProblemNotification","uiNotification","defaultUrlOptions","alarm_unique_id","alarm_id","alarm_event_id","alarm_when","parseQueryPair","isInvalidPair","isPrintMode","mapIndexed","mergeRight","parseUrl","watchFetchDataResponseChannel","fetchDataSaga","fetchChartSaga","fetchInfoSaga","chartSagas","CONCURRENT_CALLS_LIMIT_METRICS","fetchDataResponseChannel","take","action","start","end","put","constructCompatibleKey","IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS","getGroupByValues","fetchMetrics$","group","selectSnapshot","dimensionsWithUrlOptions","matchingKey","snapshotKey","agentOptionsOriginal","hasFlip","agentOptions","shouldAddFakeFlip","groupValues","axiosOptions","agent_options","post_aggregation_methods","aggregations","valueOf","fillMissingPoints","transformedResults","postAggregated","post_aggregated_data","fetchForSnapshot$","resetFetchForSnapshot$","fetchDataForSnapshotSaga","aggr_method","node_ids","stopSnapshotModeSaga","response","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","selectFullInfoPayload","__SV","_i","api_host","insertBefore","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","configureStore","loadCss","resolve","reject","fileRef","onerror","isDygraphSparkline","chartLibrariesSettings","hasToolboxPanAndZoom","xssRegexIgnore","isLogScale","hasLegend","trackColors","containerClass","peity","google","easypiechart","aspectRatio","gauge","textonly","groupbox","getChartURLOptions","shouldEliminateZeroDimensions","BIGGEST_INTERVAL_NUMBER","Loader","containerNode","hasEmptyData","screenHeight","lost","paddingTop","getPanAndZoomStep","ctrlKey","pan_and_zoom_factor","pan_and_zoom_factor_multiplier_control","pan_and_zoom_factor_multiplier_shift","pan_and_zoom_factor_multiplier_alt","safeEqualCheck","formattersFixed","formattersZeroBased","fastNumberFormat","NumberFormat","useGrouping","minimumFractionDigits","maximumFractionDigits","getLegendFormatValue","convertUnits","intlNumberFormat","valueDecimalDetail","dmin","dmax","convertedValue","useFormatters","selectTemperatureSetting","selectSecondsAsTimeSetting","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","dimensionId","rgb","hexFull","colorHex2Rgb","isSelected","hoveredValueArray","view_latest_values","role","tabIndex","ChartTimeframe","ChartLegendBottom","legendToolbox","resizeHandler","ChartLegend","setSelectedDimensions","LegendToolbox","onToolboxLeftClick","onToolboxRightClick","onToolboxZoomInClick","onToolboxZoomOutClick","getDataForFakeStacked","dimensionsVisibility","currentMin","currentMax","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","distance","first_entry","hasProceeded","defaultPositionTo","topMargin","ProceededChartDisclaimer","forwardRef","backgroundColorMap","WARNING","CRITICAL","CLEAR","borderColorMap","getBorderColor","textColorMap","Badge","border","getInitialDygraphOptions","hiddenLabelsElementId","orderedColors","setMinMax","shouldSmoothPlot","isSparkline","grid","includeZero","ylabel","smoothPlotter","strokePattern","drawGapEdgePoints","gridLinePattern","logscale","Dygraph","toTimeString","DygraphChart","chartElementClassName","chartElementId","onUpdateChartPanAndZoom","immediatelyDispatchPanAndZoom","setGlobalChartUnderlay","setHoveredX","viewAfter","selectGlobalChartUnderlay","selectedAlarm","selectAlarm","updateChartPanOrZoom","shouldNotExceedAvailableRange","dygraphInstance","latestIsUserAction","isMouseDown","dygraphHighlightAfter","dygraphLastTouchMove","dygraphLastTouchPageX","dygraphLastTouchEnd","isSyncPanAndZoom","selectSyncPanAndZoom","resetGlobalPanAndZoom","isRendered","toggleIsRendered","positionTo","useDygraphBadge","isAlarmBadgeVisible","alarmBadgeRef","updateAlarmBadge","isProceeded","precededChartRef","updatePrecededPosition","useLayoutEffect","selectSmoothPlot","dygraphOptionsStatic","dygraphOptions","newHoveredX","xRange","last_entry","isInRangeOfAvailableData","minDate","maxDate","currentAlarm","alarmPosition","fillColor","globalAlphaCache","globalAlpha","bottomLeft","topRight","isOutsideReasonableViewport","metaKey","sortedRange","wheel","normalDef","wheelDelta","deltaY","detail","layerX","offsetLeft","xPct","axisAfterOffset","offsetToPercentage","zoomInPercentage","bias","afterAxis","beforeAxis","increment","updatedAfter","updatedBefore","zoom","dygraphPlotter","pct","double_click_speed","instance","useUpdateEffect","selectSpacePanelTransitionEndIsActive","forceDateWindow","hasChangedDuration","hasScrolledToTheFutureDuringPlayMode","optionsDateWindow","selectGlobalSelectionMaster","commonMinState","selectCommonMin","commonMaxState","selectCommonMax","shouldUseCommonMin","shouldUseCommonMax","shouldUpdate","newExtremes","useUnmount","resizeObserver","useMount","hasOmitedFirstCallback","callbackDebounced","waitFor","args","debounce","ResizeObserver","observe","disconnect","EasyPieChart","chartWidth","chartInstance","setChartInstance","valueIndex","safeMinMax","_min","_max","isMinOverride","isMaxOverride","getPercentFromValueMinMax","easypiechart_track","easypiechart_scale","newChartInstance","EasyPie","barColor","trackColor","scaleColor","scaleLength","lineCap","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","onLeave","onChange","sparklines","getCurrentRegionFields","bind","unbind","paddingLeft","fetchPromise","emptyContent","getDateRange","dt","dtString","time","t1","t2","D3pieChart","d3pieInstance","setD3pieInstance","d3pieOptions","safeContent","defaultTitle","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","chartType","areaOpacity","Map","initialGoogleOptions","hAxis","viewWindowMode","slantedText","textStyle","gridlines","vAxis","chartArea","focusTarget","pointsVisible","titlePosition","titleTextStyle","isHtml","ignoreBounds","curveType","isStacked","googleInstance","AreaChart","LineChart","TextOnly","precision","textContent","defaultAspectRatio","getCellBoxSize","cellSize","getRows","getColumns","rows","getXPosition","getYPosition","getFullWidth","getFullHeight","getOffsetPosition","onMouseenter","onMouseout","cellPadding","hoveredIndex","getEvent","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","activeBox","activateBox","clearEvents","drawBox","registerEvents","strokeRect","drawBoxes","onMouseEnter","onMouseLeave","getAlign","Title","Label","Flex","attrs","TextMicro","GroupBoxWrapper","groupIndex","renderGroupPopover","renderBoxPopover","maxWidth","boxPopover","boxAlign","groupPopover","alignItems","plain","isOpen","popoverRef","GroupBoxes","flexWrap","vertical","flex","LinearColorScaleBar","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","neutral","themeType","Tabs","ExpandButton","makeFlex","Section","onExpand","noBorder","side","justifyContent","getPortalNodeStyles","shouldAddSpecialHeight","heightFromLocalStorage","heightID","persitedHeight","getHeightFromLocalStorage","heightOverriden","chartDefaultsMinWidth","min_width","minWidth","globalIntersectionOptions","root","rootMargin","threshold","globalIntersectionObserver","globalObserver","IntersectionObserver","entries","isIntersecting","unsubscribe","elementToUnsubscribe","createGlobalIntersectionObserver","InvisibleSearchableText","opacity","shouldCleanChartStateAlways","DisableOutOfView","portalNode","hasPortalNodeBeenStyled","setHasPortalNodeBeenStyled","isShowingAlarmOnChart","forEachObjIndexed","styleName","setProperty","destroyOnHide","selectDestroyOnHide","clonedChildrenRef","isVisibleIntersection","setIsVisible","isVisibleRef","newIsVisible","useCommonIntersection","debounceTime","selectIsAsyncOnScroll","shouldHideDebounced","setShouldHideDebounced","useDebounce","shouldHide","previousIsVisibleIntersection","newClonedChildren","child","cloned","clonedCanvases","querySelectorAll","oldCanvas","newCanvas","drawImage","cloneWithCanvas","clonedChildrenContainer","nodeElement","ChartContainer","dropdownMenu","renderCustomElementForDygraph","onAttributesChange","externalChartMetadata","sectionTitle","MigrationModalPromos","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","selectUnitsScalingMethod","shouldDisplayToolbox","legend_toolbox","shouldDisplayResizeHandler","resize_charts","allDimensionNames","dimensionNamesFromMetadata","additionalDimensionNamesFromData","localHoveredX","setLocalHoveredX","isSyncSelection","selectSyncSelection","handleSetHoveredX","noMaster","globalHoveredX","selectGlobalSelection","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","createSelectAssignedColors","__","isTimeVisible","DropdownItem","DropdownItemLabel","DotsBtn","ChartDropdown","setIsOpen","handleClose","circleAnimation","keyframes","SpinnerContainer","Circle","Circle2","Circle3","ChartSpinner","spaceBetween","ChartDropdownContainer","dimensionsAggrMethodMap","ChartWithLoader","selectChartMetadataRequest","actualChartMetadata","panAndZoom","isPanAndZoomMaster","areCriteriaMet","preferedIntervalTime","selectHasWindowFocus","stopUpdatesWhenFocusIsLost","selectStopUpdatesWhenFocusIsLost","selectGlobalPause","shouldBeUpdating","shouldFetch","setShouldFetch","shouldFetchImmediatelyAfterFocus","setShouldFetchImmediatelyAfterFocus","intervalTime","useInterval","useFetchNewDataClock","panAndZoomThrottled","useThrottle","initialBefore","liveModeAfter","boundingClientRect","isShowingSnapshot","selectShouldEliminateZeroDimensions","shouldUsePanAndZoomPadding","selectPanAndZoomDataPadding","CancelToken","shouldShowSpinnerDebounced","setShouldShowSpinnerDebounced","shouldShowSpinner","newViewRange","forceDataPoints","force_data_points","pointsMultiplier","requestedPadding","pixelsPerPointAttribute","pixelsPerPointSetting","pixels_per_point","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","global","truncate","tooltipBackground","CustomTooltip","isBasic","getContent","contentNode","Tooltip","getTooltipContent","Options","data-toggle","data-target","VersionControl","currentVersion","isStableReleaseChannel","releaseChannel","githubVersion","gcsVersionResponse","mediaLink","mediaLinkResponse","latestVersion","transformGcsVersionResponse","isNewVersionAvailable","small","versionSelector","Version","initialValue","setToggle","toggle","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","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","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","onEsc","onClickOutside","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","Dropdown","MemoizedPlayOptions","GlobalControls","hollowColors","hollow","pillProps","Alarms","selectActiveAlarms","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","IframeContainer","Iframe","signedIn","rendered","setRendered","signInMsg","lsValue","removeLsValue","selectCloudBaseUrl","nameParam","originParam","signInIframeUrl","onLoad","useCheckSignInStatus","hasSignedInBefore","setHasSignedInBefore","onMessage","isNew","SignIn","isRegistry","onSignIn","CloudTab","showBorderLeft","onActivate","fixed","closable","TITLE","TabsContentText","TabsContent","Home","image","nodeView","Overview","Nodes","Dashboards","Alerts","Anomalies","video","Pricing","Privacy","DiscoverCloudDrop","parentRef","closeDropdown","handleGoToCloud","backdrop","marginLeft","frameBorder","allow","allowFullScreen","InnerPositioner","DiscoverCloud","setIsModalOpen","selectedModalContent","setSelectedModalContent","dropDownParentRef","handleOpenModal","selectedContentId","SignOut","SignInItem","isSignedInSelector","dashboard","UserSettings","menuItems","separator","DarkTheme","SpacesSkeleton","Fragment","SpacesIframe","Spaces","getNodeUrl","baseUrl","getNodes","hostsStatus","base","decodeURI","getBaseUrl","replicatedNodes","Anchor","StyledIcon","ReplicatedNodes","listOpen","setListOpen","toggleListOpen","iconLeft","SpacePanelIframe","spacePanelMessage","promptContent","signIn","signUp","SignInPrompt","NoNetwork","viewBox","xmlns","fillRule","clipRule","OfflinePrompt","NodesContainer","ListItem","TrashIcon","NodeUrl","TextNano","withComponent","NodeName","handle","metaIcon","maxLength","spanLength","truncateMiddle","VisitedNodes","sortedMachines","machinesArray","replicatedNodesSelector","visitedNodesSelector","visitedNodes","globalRegistry","selectIsUsingGlobalRegistry","switchIdentity","persist","pointerEvents","setLsValue","selectSpacePanelIsActive","Layout","printMode","mapTheme","slate","white","DefaultTheme","MigrationModal","migrationModalPromoInfo","setUserPrefrence","savePromoRemindMeSelection","migrationModalPromo","requestRefreshOfAccess","isRememberChoiceChecked","setIsRememberChoiceChecked","toPath","userPreference","handleClickedCTA2","CTA2","tickBoxOption","makeUTMParameters","modalPromo","utmParametersToString","migrationmodalInfo","PROMO_SIGN_UP_CLOUD","preferenceID","PROMO_SIGN_IN_CLOUD","PROMO_IVNITED_TO_SPACE","PROMO_CLAIM_NODE","PROMO_TO_USE_NEW_DASHBAORD","FALLBACK_TO_AGENT","NO_INFO_FALLBACK_TO_AGENT","modalStatusWithPromoFunctions","userSavedPreference","nodeClaimedStatus","useMigrationModal","modalStatus","MigrationManager","cloudUrl","selectSignInUrl","term","linkToCoud","redirectURI","hasPromoSelectionSaved","isPromoEligibleForShow","showModalTimer","goToCloud","FakeMargin","Box","App","useStore","refreshHelper","setRefreshHelper","haveDOMReadyForParsing","loadOverlay","shouldUseRegistry","useRegistry","shouldUseAlarms","selectHasStartedAlarms","useAlarms","shouldUseInfo","useInfo","hasFetchDependencies","setHasFetchDependencies","bootstrap_css","dashboard_css","useChartsMetadata","selectHasFetchedInfo","selectTheme","alarmWhen","alarmTime","alarmChart","alarmValue","useAlarmFromUrl","ReactDOM","isRegistrySelector","offlineSelector","signInUrl","fragmentParamsSeparatorRegEx","param","makeHashFromObject","allParams","allParamsResult","mergeDeepLeft","excludedParams","filteredParams","getFilteredHash","htmlIframeElement","iframeElement","contentWindow","postMessage","messageType","defaultState","lastMessage","setLastMessage","handleMessage","resetMesssage","process","useSelectorOriginal","useDispatchOriginal","getIsDemo","selectGlobal","globalState","selectOptions","optionName","selectChartsMetadata","allMetadata","BaseAnchor","Component","assign","meta","INITIAL_OPTIONS","netdataNoBootstrap","optionsFromLocalStorage","localStorageKeyToOption","parsed","getItemFromLocalStorage","overridenOptions"],"mappings":"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ER,CACE1kB,MAAO,SACPi1H,KAAM,IACN17F,KAAM,gCACN7U,IAAK,CAAC,aAAc,iBAAkB,eAAgB,sBAExD,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CACH,aACA,mBACA,mBACA,oBACA,mBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CACH,oBACA,iBACA,eACA,gBACA,oBAGJ,CACE1kB,MAAO,iCACPi1H,KAAM,MACN17F,KAAM,kBACN7U,IAAK,CAAC,yBAER,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,iBACA,sBACA,kBACA,oBACA,qBACA,YAGJ,CACE1kB,MAAO,4BACPi1H,KAAM,OACN17F,KAAM,UACN7U,IAAK,CACH,kBACA,uBACA,qBACA,kBACA,cAGJ,CACE1kB,MAAO,kCACPi1H,KAAM,MACN17F,KAAM,8BACN7U,IAAK,CAAC,oBAAqB,qBAE7B,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,8BACN7U,IAAK,CACH,gBACA,wBACA,iBACA,mBACA,iBACA,kBACA,sBACA,YAGJ,CACE1kB,MAAO,gCACPi1H,KAAM,OACN17F,KAAM,kBACN7U,IAAK,CACH,iBACA,qBACA,sBACA,oBACA,kBACA,sBACA,YACA,sBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,kBACA,uBACA,4BACA,oBACA,oBACA,8BACA,8BACA,iCACA,sBACA,uBACA,mBACA,mBACA,YAGJ,CACE1kB,MAAO,iCACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CACH,yBACA,iBACA,iBACA,sBACA,sBAGJ,CACE1kB,MAAO,+BACPi1H,KAAM,OACN17F,KAAM,eACN7U,IAAK,CAAC,iBAAkB,0BAE1B,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,iBACA,wBACA,mBACA,oBACA,kBACA,eACA,iBACA,qBACA,cAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CACH,kBACA,iBACA,6BACA,4BACA,0BACA,kBACA,8BACA,qBACA,mBACA,iBACA,mBACA,kBACA,sBACA,yBACA,sBACA,kBACA,YAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,iBACN7U,IAAK,CAAC,0BAA2B,wBAAyB,yBAE5D,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,yBACN7U,IAAK,CACH,oBACA,oBACA,kBACA,kBACA,gBACA,qBAGJ,CACE1kB,MAAO,kCACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CAAC,uBAAwB,mBAEhC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,uCACN7U,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,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,WACN7U,IAAK,CAAC,mBAAoB,sBAE5B,CACE1kB,MAAO,6BACPi1H,KAAM,MACN17F,KAAM,eACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,iCACPi1H,KAAM,QACN17F,KAAM,WACN7U,IAAK,CAAC,sBAER,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,eACN7U,IAAK,CACH,6BACA,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,uBACA,oBACA,kBACA,gBACA,oBAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,qBACN7U,IAAK,CACH,oBACA,gBACA,kBACA,oBACA,iBACA,qBACA,iBACA,mBACA,qBACA,mBACA,cAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,kBAER,CACE1kB,MAAO,SACPi1H,KAAM,IACN17F,KAAM,gCACN7U,IAAK,CAAC,kBAAmB,yBAA0B,cAErD,CACE1kB,MAAO,6BACPi1H,KAAM,MACN17F,KAAM,qBACN7U,IAAK,IAEP,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,uBAAwB,oBAEhC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,iBACN7U,IAAK,CAAC,sBAAuB,cAE/B,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,oBAAqB,oBAE7B,CACE1kB,MAAO,MACPi1H,KAAM,MACN17F,KAAM,6BACN7U,IAAK,CAAC,uBAAwB,YAEhC,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,qBAAsB,kBAAmB,gBAAiB,kBAElE,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,iBACN7U,IAAK,CACH,kBACA,kBACA,mBACA,gBACA,kBAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,eACA,gBACA,gBACA,gBACA,iBACA,eACA,kBACA,cACA,kBACA,oBACA,qBACA,kBACA,qBACA,uBAGJ,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,mDACN7U,IAAK,CACH,sBACA,mBACA,iBACA,gBACA,kBACA,mBACA,oBACA,eACA,gBACA,cACA,cACA,oBACA,mBACA,eACA,iBACA,gBACA,kBAGJ,CACE1kB,MAAO,+BACPi1H,KAAM,OACN17F,KAAM,oDACN7U,IAAK,CACH,kBACA,oBACA,kBACA,mBACA,mBACA,gBACA,kBAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CAAC,eAAgB,kBAAmB,oBAAqB,gBAAiB,iBAEjF,CACE1kB,MAAO,iCACPi1H,KAAM,OACN17F,KAAM,mCACN7U,IAAK,CAAC,kBAAmB,gBAAiB,gBAAiB,kBAE7D,CACE1kB,MAAO,kCACPi1H,KAAM,QACN17F,KAAM,sBACN7U,IAAK,CACH,iBACA,gBACA,qBACA,gBACA,kBACA,eACA,oBACA,gBACA,gBACA,kBACA,gBACA,oBACA,eACA,cAGJ,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,eAAgB,gBAAiB,mBAAoB,oBAE7D,CACE1kB,MAAO,4BACPi1H,KAAM,OACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,kBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,YACN7U,IAAK,CACH,eACA,gBACA,mBACA,kBACA,kBACA,cACA,mBACA,iBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,mBACN7U,IAAK,CACH,kBACA,mBACA,kBACA,gBACA,sBACA,gBACA,oBACA,gBACA,gBACA,gBACA,iBACA,cAGJ,CACE1kB,MAAO,oBACPi1H,KAAM,MACN17F,KAAM,gDACN7U,IAAK,CACH,kBACA,cACA,mBACA,cACA,eACA,iBACA,kBACA,iBACA,sBAGJ,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,WACN7U,IAAK,CAAC,oBAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,eAER,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,cACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,qBACPi1H,KAAM,MACN17F,KAAM,iBACN7U,IAAK,CAAC,YAAa,eAAgB,cAAe,aAAc,gBAElE,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,UACN7U,IAAK,CACH,qBACA,gBACA,uBACA,kBACA,cACA,iBACA,kBACA,mBACA,iBACA,mBACA,YACA,sBACA,gBACA,mBAGJ,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,2CACN7U,IAAK,CAAC,eAAgB,gBAAiB,oBAAqB,mBAAoB,iBAElF,CACE1kB,MAAO,cACPi1H,KAAM,OACN17F,KAAM,6BACN7U,IAAK,CAAC,mBAAoB,gBAAiB,qBAE7C,CACE1kB,MAAO,qBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,oBACN7U,IAAK,CAAC,aAAc,cAAe,cAErC,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,OACN7U,IAAK,CAAC,cAER,CACE1kB,MAAO,0BACPi1H,KAAM,MACN17F,KAAM,aACN7U,IAAK,CAAC,cAAe,mBAAoB,mBAE3C,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,UACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,eAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,qBACN7U,IAAK,CACH,oBACA,aACA,cACA,gBACA,gBACA,YACA,iBACA,gBACA,YACA,mBACA,oBAGJ,CACE1kB,MAAO,qBACPi1H,KAAM,OACN17F,KAAM,gBACN7U,IAAK,CAAC,uBAER,CACE1kB,MAAO,yBACPi1H,KAAM,MACN17F,KAAM,qBACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,sCACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CAAC,iBAER,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,YACN7U,IAAK,CAAC,mBAER,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,sBACN7U,IAAK,CACH,oBACA,cACA,eACA,iBACA,cACA,YACA,kBAGJ,CACE1kB,MAAO,2BACPi1H,KAAM,MACN17F,KAAM,QACN7U,IAAK,CAAC,aAAc,iBAEtB,CACE1kB,MAAO,wBACPi1H,KAAM,MACN17F,KAAM,mBACN7U,IAAK,CAAC,eAAgB,iBAExB,CACE1kB,MAAO,wBACPi1H,KAAM,OACN17F,KAAM,0BACN7U,IAAK,CACH,mBACA,eACA,YACA,eACA,kBACA,iBACA,cACA,iBACA,YACA,qBAGJ,CACE1kB,MAAO,gCACPi1H,KAAM,QACN17F,KAAM,cACN7U,IAAK,CAAC,oBAAqB,mBAAoB,cAEjD,CACE1kB,MAAO,sBACPi1H,KAAM,MACN17F,KAAM,wCACN7U,IAAK,CAAC,iBAAkB,aAAc,kBAExC,CACE1kB,MAAO,2BACPi1H,KAAM,OACN17F,KAAM,cACN7U,IAAK,CAAC,qBAER,CACE1kB,MAAO,0BACPi1H,KAAM,OACN17F,KAAM,0BACN7U,IAAK,CACH,cACA,oBACA,eACA,gBACA,cACA,iBACA,cAGJ,CACE1kB,MAAO,6BACPi1H,KAAM,OACN17F,KAAM,QACN7U,IAAK,CAAC,mBAAoB,oBAE5B,CACE1kB,MAAO,uBACPi1H,KAAM,MACN17F,KAAM,SACN7U,IAAK,CAAC,gBAER,CACE1kB,MAAO,4BACPi1H,KAAM,MACN17F,KAAM,cACN7U,IAAK,CAAC,kBAAmB,qBAE3B,CACE1kB,MAAO,gCACPi1H,KAAM,QACN17F,KAAM,U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","file":"static/js/main.e248095a.chunk.js","sourcesContent":["export const zeropad = (x: string | number) => {\n if (x > -10 && x < 10) {\n return `0${x}`\n }\n return `${x}`\n}\n\ninterface ScalableUnits {\n [unitGroupName: string]: {\n [unitName: string]: number\n }\n}\n\nexport const leaveAtLeast1Decimal = (number: number) => {\n const decimalPortion = `${number}`.split(\".\")[1]\n if (decimalPortion && decimalPortion.length > 1) {\n return `${number}`\n }\n\n let tms = number * 10\n const integer = Math.floor(tms / 10)\n\n tms -= integer * 10\n return `${integer}.${tms}`\n}\n\ntype TimeUnit = \"MINUTES\" | \"HOURS\" | \"DAYS\"\nconst seconds2time = (seconds: number, maxTimeUnit: TimeUnit) => {\n let secondsReturn = Math.abs(seconds)\n\n const days = maxTimeUnit === \"DAYS\" ? Math.floor(secondsReturn / 86400) : 0\n secondsReturn -= days * 86400\n\n const hours =\n maxTimeUnit === \"DAYS\" || maxTimeUnit === \"HOURS\" ? Math.floor(secondsReturn / 3600) : 0\n secondsReturn -= hours * 3600\n\n const minutes = Math.floor(secondsReturn / 60)\n secondsReturn -= minutes * 60\n\n const daysString = maxTimeUnit === \"DAYS\" ? `${days}d:` : \"\"\n const hoursString = maxTimeUnit === \"DAYS\" || maxTimeUnit === \"HOURS\" ? `${zeropad(hours)}:` : \"\"\n const minutesString = `${zeropad(minutes)}:`\n let secondsString = zeropad(secondsReturn.toFixed(2))\n\n return `${daysString}${hoursString}${minutesString}${secondsString}`\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}\n\nconst twoFixed =\n (multiplier: number = 1) =>\n (value: number) =>\n (value * multiplier).toFixed(2)\n\nconst convertibleUnits: ConvertibleUnits = {\n Celsius: {\n Fahrenheit: {\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() {\n return currentTemperatureSetting === \"fahrenheit\"\n },\n convert(value: number) {\n return (value * 9) / 5 + 32\n },\n },\n },\n milliseconds: {\n microseconds: {\n check: (max: number) => max < 1,\n convert: twoFixed(1000),\n },\n milliseconds: {\n check: (max: number) => max >= 1 && max < 1000,\n convert: twoFixed(),\n },\n seconds: {\n check: (max: number) => max >= 1000 && max < 60000,\n convert: twoFixed(0.001),\n },\n \"MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 60000 && max < 3600_000,\n convert: (value: number) => seconds2time(value / 1000, \"MINUTES\"),\n },\n \"HH:MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 3600_000 && max < 86_400_000,\n convert: (value: number) => seconds2time(value / 1000, \"HOURS\"),\n },\n \"dHH:MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 86_400_000,\n convert: (value: number) => seconds2time(value / 1000, \"DAYS\"),\n },\n },\n\n seconds: {\n microseconds: {\n check: (max: number) => max < 0.001,\n convert: twoFixed(1000_000),\n },\n milliseconds: {\n check: (max: number) => max >= 0.001 && max < 1,\n convert: twoFixed(1000),\n },\n seconds: {\n check: (max: number) => max >= 1 && max < 60,\n convert: twoFixed(1),\n },\n \"MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 60 && max < 3600,\n convert: (value: number) => seconds2time(value, \"MINUTES\"),\n },\n \"HH:MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 3600 && max < 86_400,\n convert: (value: number) => seconds2time(value, \"HOURS\"),\n },\n \"dHH:MM:SS.ms\": {\n check: (max: number) => currentSecondsAsTimeSetting && max >= 86_400,\n convert: (value: number) => seconds2time(value, \"DAYS\"),\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 // get a function that converts the units\n // + every time units are switched call the callback\n get(\n uuid: string,\n min: number,\n max: number,\n units: string | undefined,\n desiredUnits: undefined | null | string,\n commonUnitsName: string | null | undefined,\n switchUnitsCallback: (units: string) => void,\n 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 * 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 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 = \"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, UserNodeAccessMessage } 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 }>(\n `${storeKey}/setUTCOffset`\n)\n\nexport const setUserNodeAccess = createAction<{ message: UserNodeAccessMessage }>(\n `${storeKey}/setUserNodeAccess`\n)\n","import { useCallback } from \"react\"\nimport { useDispatch } from \"react-redux\"\nimport { sendToChildIframe, useListenToPostMessage } from \"utils/post-message\"\nimport { setUserNodeAccess } from \"domains/global/actions\"\nimport { UserNodeAccessMessage } from \"domains/global/types\"\nimport { SIGN_IN_IFRAME_ID } from \"components/header/constants\"\n\nconst useUserNodeAccessMessage = () => {\n const dispatch = useDispatch()\n useListenToPostMessage<UserNodeAccessMessage>(\"user-node-access\", message => {\n dispatch(setUserNodeAccess({ message }))\n })\n}\n\nexport const useRequestRefreshOfAccessMessage = () => {\n return useCallback(() => {\n sendToChildIframe(SIGN_IN_IFRAME_ID, { type: \"request-refresh-access\", payload: true })\n }, [])\n}\n\nexport default useUserNodeAccessMessage\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 setUserNodeAccess,\n} from \"./actions\"\nimport {\n Options,\n optionsMergedWithLocalStorage,\n getOptionsMergedWithLocalStorage,\n clearLocalStorage,\n} from \"./options\"\nimport { CLOUD_BASE_URL_DISABLED } from \"./constants\"\nimport { UserNodeAccessMessage } from \"./types\"\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 userNodeAccess: UserNodeAccessMessage\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 userNodeAccess: null,\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\nglobalReducer.on(setUserNodeAccess, (state, { message }) => ({ ...state, userNodeAccess: message }))\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","export const SIGN_IN_IFRAME_ID = \"sign_in_iframe\"\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, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/#/g, '#')\n .replace(/'/g, ''')\n .replace(/\\(/g, '(')\n .replace(/\\)/g, ')')\n .replace(/\\//g, '/');\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 const fallbackAfter = -600000\n const defaultAfter = urlOptions.after ? urlOptions.after * 1000 : fallbackAfter\n urlOptions.after = urlOptions.before + defaultAfter;\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 if (netdataSnapshotData === null) {\n urlOptions.pan_and_zoom = status;\n urlOptions.after = after;\n urlOptions.before = before;\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 + ' ' + 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 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 'dnsmasq':\n chart.menu = chart.type;\n if (parts.length == 2 && parts[1] === 'dhcp') {\n chart.menu = tmp + '_' + parts[1];\n } else if (parts.length > 2 && parts[1] === 'dhcp') {\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 /> <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/> <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> red </b></span> is critical, <span style=\"color:#fe7d37\"><b> orange </b></span> is warning, <span style=\"color: #4c1\"><b> bright green </b></span> is ok, <span style=\"color: #9f9f9f\"><b> light grey </b></span> is undefined (i.e. no data or no status), <span style=\"color: #000\"><b> black </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 = ' ';\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: ' ' }) + '</code> and up to <code>' + seconds4human(alarm.lookup_before, { space: ' ' }) + '</code>'\n + ((alarm.lookup_options) ? (', with options <code>' + alarm.lookup_options.replace(/ /g, ', ') + '</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/> <br/>role: <b>' + alarm.recipient + '</b><br/> <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/> <br/><embed src=\"' + badge_url + '\" type=\"image/svg+xml\" height=\"20\"/><br/> <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 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 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 = '%';\n }\n\n html += ((typeof alarm.lookup_after !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">db 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 threshold</td><td><code>' + chart.green + ' ' + units + '</code></td></tr>') : '')\n + ((chart.red !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">red 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 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 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: ' ',\n negative_suffix: ''\n });\n } else {\n delay = '<small><br/>hysteresis ';\n if (alarm.delay_up_duration > 0) {\n delay += 'on escalation <code>' + seconds4human(alarm.delay_up_duration, {\n space: ' ',\n negative_suffix: ''\n }) + '</code>, ';\n }\n if (alarm.delay_down_duration > 0) {\n delay += 'on recovery <code>' + seconds4human(alarm.delay_down_duration, {\n space: ' ',\n negative_suffix: ''\n }) + '</code>, ';\n }\n }\n if (alarm.delay_multiplier !== 1.0) {\n delay += 'multiplied by <code>' + alarm.delay_multiplier.toString() + '</code>';\n delay += ', up to <code>' + seconds4human(alarm.delay_max_duration, {\n space: ' ',\n negative_suffix: ''\n }) + '</code>';\n }\n delay += '</small>';\n }\n\n html += '<tr><td width=\"10%\" style=\"text-align:right\">check every</td><td>' + seconds4human(alarm.update_every, {\n space: ' ',\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 initialization 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, channel) {\n versionLog('Downloading latest version id from github...');\n let url\n\n if (channel === 'stable') {\n url = 'https://api.github.com/repos/netdata/netdata/releases/latest'\n } else {\n url = 'https://api.github.com/repos/netdata/netdata-nightlies/releases/latest'\n }\n\n $.ajax({\n url: url,\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 checkForUpdateByVersion(force, callback) {\n getGithubLatestVersion(function (sha2) {\n callback(options.version, sha2);\n }, options.release_channel);\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\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 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 omit 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 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","import React, { useMemo } from \"react\"\nimport { CloudConnectionProps, ConnectionModalStatusContent } from \"./types\"\nimport Anchor from \"@/src/components/anchor\"\n\nimport { Text } from \"@netdata/netdata-ui\"\n\nexport const makeCloudConnectionStatusInfo = ({\n nodeStatus,\n userStatus,\n date,\n}: CloudConnectionProps): ConnectionModalStatusContent => ({\n title: \"Netdata Cloud connection status\",\n text: {\n header: () => {\n return (\n <Text>\n This node is currently{\" \"}\n <Text strong>{nodeStatus === \"LIVE\" ? \"Connected\" : \"Not Connected\"}</Text> to Netdata\n Cloud\n </Text>\n )\n },\n bullets:\n nodeStatus === \"NOT_LIVE\"\n ? [\n // `The node lost its Netdata Cloud connection at ${date}`,\n () => (\n <Text>\n To troubleshoot Netdata Cloud connection issues, please follow{\" \"}\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://learn.netdata.cloud/docs/agent/claim#troubleshooting\"\n >\n this guide\n </Anchor>\n .\n </Text>\n ),\n ]\n : [],\n footer: () => (\n <Text>\n You are{\" \"}\n <Text strong>\n {userStatus === \"LOGGED_IN\"\n ? \"Logged In\"\n : userStatus === \"EXPIRED_LOGIN\"\n ? \"Logged out\"\n : \"Not signed-up\"}\n </Text>{\" \"}\n to Netdata Cloud\n </Text>\n ),\n },\n CTA1: {\n text: \"Take me to Netdata Cloud\",\n },\n})\n\nconst useCloudConnectionStatus = ({ userStatus, nodeStatus, date }: CloudConnectionProps) => {\n const cloudConnectionStatusInfo = useMemo<ConnectionModalStatusContent>(() => {\n return makeCloudConnectionStatusInfo({ userStatus, nodeStatus, date })\n }, [userStatus, nodeStatus, date])\n\n return cloudConnectionStatusInfo\n}\n\nexport default useCloudConnectionStatus\n","import React, { useCallback } from \"react\"\nimport GoToCloud from \"components/auth/signIn\"\n\nimport {\n Modal,\n ModalContent,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n Flex,\n H3,\n Button,\n Box,\n ModalCloseButton,\n} from \"@netdata/netdata-ui\"\n\nimport { ConnectionModalStatusContent } from \"./types\"\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nexport type CloudConnectionStatusModalProps = ConnectionModalStatusContent & {\n closeModal: () => void\n onRefresh?: () => void\n isCTA1Disabled: boolean\n}\n\nconst CloudConnectionStatusModal = ({\n title,\n text,\n CTA1,\n closeModal,\n onRefresh,\n isCTA1Disabled,\n}: CloudConnectionStatusModalProps) => {\n const handleClickedCTA1 = useCallback(\n ({ link }: { link: string }) => {\n closeModal()\n window.location.href = link\n },\n [closeModal]\n )\n\n return (\n <Modal>\n <ModalContent width={180} background=\"modalBackground\">\n <ModalHeader>\n <H3 margin={[0]}>{title}</H3>\n <ModalCloseButton onClose={closeModal} />\n </ModalHeader>\n <ModalBody>\n <Flex padding={[0, 0, 4, 0]} column gap={3}>\n {text.header({})}\n {text.bullets.length > 0 && (\n <Flex column gap={3}>\n <Flex column gap={1} as={\"ul\"}>\n {text.bullets.map((bullet, index) => {\n if (typeof bullet === \"function\") {\n return <li key={index}> {bullet()}</li>\n }\n return (\n <li key={bullet}>\n <Text>{bullet}</Text>\n </li>\n )\n })}\n </Flex>\n </Flex>\n )}\n {text.footer()}\n </Flex>\n </ModalBody>\n <ModalFooter>\n <Box data-testid=\"cta1\" margin={[0, 2, 0, 0]} width={{ min: 40 }}>\n <GoToCloud utmParameters={{ content: \"connection_to_cloud\", campaign }}>\n {({ link }) => (\n <Button\n data-ga={`connection-to-cloud::click-ct1::ad`}\n disabled={isCTA1Disabled}\n textTransform=\"none\"\n data-testid=\"cta1-button\"\n onClick={() => handleClickedCTA1({ link })}\n width=\"100%\"\n label={CTA1.text}\n />\n )}\n </GoToCloud>\n </Box>\n <Box\n data-ga={`connection-to-cloud::click-check-now::ad`}\n onClick={onRefresh}\n height={10}\n className=\"btn btn-default\"\n data-testid=\"cta2-button\"\n width={{ min: 40 }}\n >\n <Box as={Text} sx={{ fontWeight: \"500\", lineHeight: \"25px\" }}>\n Check Now\n </Box>\n </Box>\n </ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\nexport default CloudConnectionStatusModal\n","import React, { useState, useCallback, useEffect } from \"react\"\nimport useCloudConnectionStatus from \"./use-cloud-connection-status\"\nimport CloudConnectionStatusModal from \"./cloud-connection-status-modal\"\n\nimport { Pill, Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"react-redux\"\nimport { useRequestRefreshOfAccessMessage } from \"hooks/use-user-node-access\"\nimport { selectUserNodeAccess } from \"domains/global/selectors\"\nimport { PromoProps } from \"@/src/domains/dashboard/components/migration-modal\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\n\nconst CloudConnectionStatus = () => {\n const userNodeAccess = useSelector(selectUserNodeAccess) as PromoProps\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n const [isModalOpen, setModalOpen] = useState(false)\n const cloudConnectionStatusInfo = useCloudConnectionStatus({\n userStatus: userNodeAccess?.userStatus || \"UNKNOWN\",\n nodeStatus: userNodeAccess?.nodeLiveness || \"NOT_LIVE\",\n date: \"\",\n })\n\n useEffect(() => {\n if (isModalOpen) {\n document.documentElement.style.overflow = \"hidden\"\n } else {\n document.documentElement.style.overflow = \"auto\"\n }\n }, [isModalOpen])\n\n const openModal = useCallback(() => {\n setModalOpen(true)\n }, [])\n\n const closeModal = useCallback(() => {\n setModalOpen(false)\n }, [])\n\n const onRefresh = useRequestRefreshOfAccessMessage()\n\n if (!cloudEnabled) return null\n\n return (\n <Flex column>\n <Pill\n data-ga={`connection-to-cloud::click-pill::ad`}\n data-testid=\"header-connection-to-cloud-button\"\n onClick={openModal}\n flavour=\"neutral\"\n >\n Connection to Cloud\n </Pill>\n {isModalOpen && (\n <CloudConnectionStatusModal\n {...cloudConnectionStatusInfo}\n isCTA1Disabled={userNodeAccess?.nodeLiveness !== \"LIVE\"}\n closeModal={closeModal}\n onRefresh={onRefresh}\n />\n )}\n </Flex>\n )\n}\n\nexport default CloudConnectionStatus\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)[],\n obj1: T | null,\n obj2: T\n): T => {\n if (!obj1) {\n return obj2\n }\n return keys.reduce<T>(\n (acc, key) => ({\n ...acc,\n [key]: equals(obj1[key], obj2![key]) ? obj1[key] : obj2[key],\n }),\n obj2\n )\n}\n\nexport type AnyFunction<T = any> = (...args: T[]) => any\n\nexport type FunctionArguments<T extends Function> = T extends (...args: infer R) => any ? R : never\n\nexport function callAll<T extends AnyFunction>(...fns: (T | undefined)[]) {\n return function mergedFn(arg: FunctionArguments<T>[0]) {\n fns.forEach(fn => {\n fn?.(arg)\n })\n }\n}\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","export * from \"./types\"\n\nexport { default as CloudConnectionStatus } from \"./cloud-connection-status\"\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 doesn't 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.replace(/\\/v1\\/?$/, \"\")\n }\n\n const source = getScriptSource()\n return getPathFromScriptSource(source).replace(/\\/v1\\/?$/, \"\")\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","/*! @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]+\" \"+r;if(0===3600*l+60*h+u+.001*d||e>=G.Granularity.DAILY)return g(s)+\" \"+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,\"&\").replace(/\"/g,\""\").replace(/</g,\"<\").replace(/>/g,\">\")};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>: \"+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 won't 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","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 // temporarily, 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 doesn't 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://app.posthog.com\",\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 = hostname\n const url = 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 omitting 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 whether 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 { useCallback, useState, useMemo, useRef } 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 }\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 (\n convertUnits: Converter,\n intlNumberFormat: Intl.NumberFormat | null,\n valueDecimalDetail: number\n ) =>\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 refactored\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 const legendFormatValue: LegendFormatValue = useMemo(\n () => getLegendFormatValue(convertUnits, intlNumberFormat, decimalDigits),\n [convertUnits, decimalDigits, intlNumberFormat]\n )\n\n const legendFormatValueRef = useRef(legendFormatValue)\n const updateLegendFormatValueRef = (\n newConvertUnits: Converter,\n newIntlNumberFormat: any,\n newDecimalDigits: any\n ) => {\n legendFormatValueRef.current = getLegendFormatValue(\n newConvertUnits,\n newIntlNumberFormat,\n newDecimalDigits\n )\n }\n\n const legendFormatValueDecimalsFromMinMax = useCallback(\n (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,\n newMin,\n newMax,\n units,\n unitsDesired,\n unitsCommon,\n switchedUnits => {\n setUnitsCurrent(switchedUnits)\n // that.legendSetUnitsString(that.units_current);\n // that.legendSetUnitsString just populates some DOM with unitsCurrent\n // on all occurrences just take the unitsCurrent from this state\n },\n temperatureSetting,\n secondsAsTimeSetting\n )\n\n // as function, so useState() interprets it properly\n setConvertUnits(() => newConvertUnits)\n\n const convertedMin = newConvertUnits(newMin)\n const convertedMax = newConvertUnits(newMax)\n\n // if number is returned, we format it!!!!\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 let newIntlNumberFormat = intlNumberFormat\n\n if (newDecimals !== decimals) {\n if (newDecimals < 0) {\n newIntlNumberFormat = null\n } else {\n newIntlNumberFormat = fastNumberFormat(newDecimals, newDecimals)\n }\n setIntlNumberFormat(() => newIntlNumberFormat)\n setDecimals(newDecimals)\n }\n updateLegendFormatValueRef(newConvertUnits, newIntlNumberFormat, newDecimals)\n return legendFormatValueRef.current\n },\n [\n decimals,\n decimalDigits,\n min,\n max,\n uuid,\n temperatureSetting,\n units,\n unitsDesired,\n unitsCommon,\n secondsAsTimeSetting,\n data.min,\n data.max,\n 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's \n <b>history</b>\n </a>\n or use the \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","//@ts-nocheck\nimport { sortBy, reverse } from \"ramda\"\nimport React, { useLayoutEffect, useRef, useCallback } 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\"\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,\n setCommonMaxAction,\n setCommonMinAction,\n setGlobalPauseAction,\n 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,\n getDataForFakeStacked,\n transformColors,\n 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\"\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 // insufficient 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\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 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.updateChartPanOrZoom = updateChartPanOrZoom\n propsRef.current.viewAfter = viewAfter\n propsRef.current.viewBefore = viewBefore\n }, [\n alarm,\n chartData,\n globalChartUnderlay,\n hoveredX,\n immediatelyDispatchPanAndZoom,\n resetGlobalPanAndZoom,\n setGlobalChartUnderlay,\n updateAlarmBadge,\n updateChartPanOrZoom,\n viewAfter,\n viewBefore,\n ])\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 // 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 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 // 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 latestIsUserAction.current = true\n // @ts-ignore\n Dygraph.endPan(event, dygraph, context)\n propsRef.current.immediatelyDispatchPanAndZoom()\n } else if (context.isZooming) {\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 if (!event.shiftKey && !event.altKey) return\n\n latestIsUserAction.current = true\n event.preventDefault()\n event.stopPropagation()\n\n // https://dygraphs.com/gallery/interaction-api.js\n const zoom = (g, zoomInPercentage, bias) => {\n bias = bias || 0.5\n const [afterAxis, beforeAxis] = g.xAxisRange()\n const delta = beforeAxis - afterAxis\n const increment = delta * zoomInPercentage\n const [afterIncrement, beforeIncrement] = [increment * bias, increment * (1 - bias)]\n\n const after = afterAxis + afterIncrement\n const before = beforeAxis - beforeIncrement\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\n const offsetToPercentage = (g, offsetX) => {\n // This is calculating the pixel offset of the leftmost date.\n const [axisAfterOffset] = g.toDomCoords(g.xAxisRange()[0], null)\n // x and w 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 - axisAfterOffset\n // This is computing the rightmost pixel, effectively defining the\n // width.\n const w = g.toDomCoords(g.xAxisRange()[1], null)[0] - axisAfterOffset\n\n // Percentage from the left.\n return w === 0 ? 0 : x / w\n }\n\n const normalDef =\n typeof event.wheelDelta === \"number\" && !Number.isNaN(event.wheelDelta)\n ? event.wheelDelta / 40\n : event.deltaY * -1.2\n\n const normal = event.detail ? event.detail * -1 : normalDef\n const percentage = normal / 50\n\n if (!event.offsetX) event.offsetX = event.layerX - event.target.offsetLeft\n const xPct = offsetToPercentage(dygraph, event.offsetX)\n\n zoom(dygraph, percentage, xPct)\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\n isVisible={isAlarmBadgeVisible}\n ref={alarmBadgeRef}\n status={alarm.status}\n label={alarm.value}\n />\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 { LOCALSTORAGE_HEIGHT_KEY_PREFIX } 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 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 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, domain?: string) {\n if (typeof (obj[key]) !== \"undefined\") {\n const config = obj[key]\n const configWithDomain = domain ? {...config, ...config[domain]} : config\n const x = configWithDomain[attr]\n\n if (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, domain?: string) {\n const x = this.anyAttribute(this.context, \"info\", id, null, domain)\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","import React, { useMemo } from \"react\"\nimport Anchor from \"@/src/components/anchor\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport { useLocalStorage } from \"react-use\"\nimport { utmUrlSuffix } from \"utils/utils\"\nimport { utmParametersToString } from \"domains/global/selectors\"\n\nexport type UserStatus = \"LOGGED_IN\" | \"EXPIRED_LOGIN\" | \"UNKNOWN\"\nexport type NodeClaimedStatus = \"NOT_CLAIMED\" | \"CLAIMED\"\nexport type UserNodeAccess = \"NO_ACCESS\" | \"ACCESS_OK\"\ntype UserPreference = \"AGENT\" | \"CLOUD\" | \"UNDEFINED\"\nexport type NodeLiveness = \"LIVE\" | \"NOT_LIVE\"\ntype CTATYPE = \"NAVIGATE\" | \"REFRESH\"\n\nexport enum MigrationModalPromos {\n PROMO_SIGN_IN_CLOUD = \"PROMO_SIGN_IN_CLOUD\",\n PROMO_SIGN_UP_CLOUD = \"PROMO_SIGN_UP_CLOUD\",\n PROMO_IVNITED_TO_SPACE = \"PROMO_IVNITED_TO_SPACE\",\n PROMO_CLAIM_NODE = \"PROMO_CLAIM_NODE\",\n PROMO_TO_USE_NEW_DASHBAORD = \"PROMO_TO_USE_NEW_DASHBAORD\",\n FALLBACK_TO_AGENT = \"FALLBACK_TO_AGENT\",\n NO_INFO_FALLBACK_TO_AGENT = \"NO_INFO_FALLBACK_TO_AGENT\",\n}\n\ntype MigrationModalActions = {\n text: string\n action: CTATYPE\n toPath?: string\n userPreference?: UserPreference | \"DONT_SHOW\"\n}\n\ntype MigrationModalContent = {\n title: string\n text: {\n header: ((props: any) => React.ReactNode) | string\n bullets?: Array<string | ((props?: any) => React.ReactNode)>\n footer?: ((props: any) => React.ReactNode) | string\n }\n tickBoxOption: { text: string; preferenceID: MigrationModalPromos }\n CTA1: MigrationModalActions\n CTA2?: MigrationModalActions\n}\n\ntype MigrationModalInfo = {\n [key in MigrationModalPromos]: MigrationModalContent\n}\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nconst makeUTMParameters = (modalPromo: MigrationModalPromos) =>\n `${utmUrlSuffix}${utmParametersToString({\n content: modalPromo,\n campaign,\n })}`\n\nexport const migrationmodalInfo: MigrationModalInfo = {\n [MigrationModalPromos.PROMO_SIGN_UP_CLOUD]: {\n title: \"Learn about Netdata Cloud!\",\n text: {\n header: () => (\n <Text strong>\n Netdata Cloud is a FREE service that complements the Netdata Agent, to provide:\n </Text>\n ),\n bullets: [\n \"Infrastructure level dashboards (each chart aggregates data from multiple nodes)\",\n \"Central dispatch of alert notifications\",\n \"Custom dashboards editor\",\n \"Intelligence assisted troubleshooting, to help surface the root cause of issues\",\n ],\n footer: \"Have a look, you will be surprised!\",\n },\n tickBoxOption: {\n text: \"Remember my choice\",\n preferenceID: MigrationModalPromos.PROMO_SIGN_UP_CLOUD,\n },\n CTA1: {\n text: \"Wow! Let’s go to Netdata Cloud\",\n toPath: \"path/signup/cloud\",\n action: \"NAVIGATE\",\n userPreference: \"CLOUD\",\n },\n CTA2: {\n text: \"Later, stay at the agent dashboard\",\n action: \"NAVIGATE\",\n toPath: \"path/agent-dashboard\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.PROMO_SIGN_IN_CLOUD]: {\n title: \"Sign-in to Netdata Cloud or get an invitation!\",\n text: {\n header: () => (\n <>\n <Text strong>\n This node is connected to Netdata Cloud but you are not. If you have a Netdata Cloud\n account sign-in, if not ask for an invitation to it.\n </Text>\n\n <Text>\n Netdata Cloud is a FREE service that complements the Netdata Agent, to provide:\n </Text>\n </>\n ),\n bullets: [\n \"Infrastructure level dashboards (each chart aggregates data from multiple nodes)\",\n \"Central dispatch of alert notifications\",\n \"Custom dashboards editor\",\n \"Intelligence assisted troubleshooting, to help surface the root cause of issues\",\n ],\n footer: \"Have a look, you will be surprised!\",\n },\n tickBoxOption: {\n text: \"Remember my choice\",\n preferenceID: MigrationModalPromos.PROMO_SIGN_IN_CLOUD,\n },\n CTA1: {\n text: \"Sign-in or get a Netdata Cloud account\",\n action: \"NAVIGATE\",\n toPath: \"path/signin/cloud\",\n userPreference: \"CLOUD\",\n },\n CTA2: {\n text: \"Later, stay at the Agent dashboard\",\n toPath: \"path/agent-dashboard\",\n action: \"NAVIGATE\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.PROMO_IVNITED_TO_SPACE]: {\n title: \"Get an invitation to this Node’s Space!\",\n text: {\n header: () => (\n <Text strong>\n This node is connected to Netdata Cloud but it isnt available on one of your Spaces.\n </Text>\n ),\n bullets: [],\n footer: \"Ask for an invitation to this Space!\",\n },\n tickBoxOption: {\n text: \"Don't remind me of this again\",\n preferenceID: MigrationModalPromos.PROMO_IVNITED_TO_SPACE,\n },\n CTA1: {\n text: \"Thanks, stay at Agent dashboard for now\",\n toPath: \"agent\",\n action: \"NAVIGATE\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.PROMO_CLAIM_NODE]: {\n title: \"This node isn’t connected to Netdata Cloud\",\n text: {\n header: () => (\n <Text strong>\n For you to be able to see this node on Netdata Cloud you will either need to:\n </Text>\n ),\n footer: \"Have a look, you will be surprised!\",\n bullets: [\n () => {\n return (\n <Text>\n {\" \"}\n Connect this node directly (documentation on{\" \"}\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://learn.netdata.cloud/docs/agent/claim?${makeUTMParameters(\n MigrationModalPromos.PROMO_CLAIM_NODE\n ).substring(1)}#how-to-connect-a-node`}\n >\n how to connect a node\n </Anchor>\n ) , or\n </Text>\n )\n },\n () => {\n return (\n <Text>\n Αctivate streaming to a parent node that is already connected (documentation on{\" \"}\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://learn.netdata.cloud/docs/metrics-storage-management/enable-streaming?${makeUTMParameters(\n MigrationModalPromos.PROMO_CLAIM_NODE\n ).substring(1)}`}\n >\n how to configure streaming\n </Anchor>\n )\n </Text>\n )\n },\n ],\n },\n tickBoxOption: {\n text: \"Remember my choice.\",\n preferenceID: MigrationModalPromos.PROMO_CLAIM_NODE,\n },\n CTA1: {\n text: \"Wow! Let’s go to Netdata Cloud\",\n action: \"NAVIGATE\",\n toPath: \"path/node/cloud\",\n userPreference: \"CLOUD\",\n },\n CTA2: {\n text: \"Later, stay at the Agent dashboard\",\n action: \"NAVIGATE\",\n toPath: \"path/agent-dashboard\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD]: {\n title: \"Use the Old or the New dashboard?\",\n text: {\n header: () => (\n <Text strong>\n This node is available in your Netdata Cloud account. So, you have full access to the NEW\n dashboards, charts, intelligence-assisted troubleshooting and many more!\n </Text>\n ),\n bullets: [],\n },\n tickBoxOption: {\n text: \"Remember my choice\",\n preferenceID: MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD,\n },\n CTA1: {\n text: \"Wow! Let’s go to Netdata Cloud \",\n action: \"NAVIGATE\",\n toPath: \"path/dashboard/cloud\",\n userPreference: \"CLOUD\",\n },\n CTA2: {\n text: \"Later, stay at the Agent dashboard\",\n action: \"NAVIGATE\",\n toPath: \"path/agent-dashboard\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.FALLBACK_TO_AGENT]: {\n title: \"Oops! This node has lost connection to Netdata Cloud!\",\n text: {\n header: ({ date = \"\" }) => {\n return (\n <>\n <Text strong>\n Unfortunately, it seems that this node is not currently connected to Netdata Cloud.\n So, the old agent dashboard is the only option available.\n </Text>\n {/* <Text>\n The node lost its Netdata Cloud connection at <Text strong>{date}</Text>.\n </Text> */}\n <Text>\n To troubleshoot Netdata Cloud connection issues, please follow this{\" \"}\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://learn.netdata.cloud/docs/agent/claim?${makeUTMParameters(\n MigrationModalPromos.FALLBACK_TO_AGENT\n ).substring(1)}#troubleshooting`}\n >\n this guide.\n </Anchor>\n </Text>\n </>\n )\n },\n bullets: [],\n },\n tickBoxOption: {\n text: \"Don't show this again\",\n preferenceID: MigrationModalPromos.FALLBACK_TO_AGENT,\n },\n CTA1: {\n text: \"Check again please\",\n action: \"REFRESH\",\n userPreference: undefined,\n },\n CTA2: {\n text: \"Thanks, stay at Agent dashboard\",\n toPath: \"path/agent\",\n action: \"NAVIGATE\",\n userPreference: \"AGENT\",\n },\n },\n [MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT]: {\n title: \"Oops! We aren't able to get information of this node in regards to Netdata Cloud!\",\n text: {\n header: () => {\n return (\n <>\n <Text strong>\n Unfortunately, it seems we aren't able to get information on this node in regards to\n Netdata Cloud.\n </Text>\n <Text>\n This could be from internet connectivity issues from your end or some temporary issue\n with our services. So, the old agent dashboard is the only option available.\n </Text>\n </>\n )\n },\n bullets: [],\n },\n tickBoxOption: {\n text: \"Don't show this again\",\n preferenceID: MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT,\n },\n CTA1: {\n text: \"Check again please\",\n action: \"REFRESH\",\n userPreference: undefined,\n },\n CTA2: {\n text: \"Thanks, stay at Agent dashboard\",\n toPath: \"path/agent-dashboard\",\n action: \"NAVIGATE\",\n userPreference: \"AGENT\",\n },\n },\n}\n\nexport type PromoProps = {\n userSavedPreference?: UserPreference\n userStatus?: UserStatus\n nodeClaimedStatus?: NodeClaimedStatus\n userNodeAccess?: UserNodeAccess\n nodeLiveness?: NodeLiveness\n}\n\nconst isPromoSignUp = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n}: PromoProps): boolean =>\n userSavedPreference !== \"AGENT\" && userStatus === \"UNKNOWN\" && nodeClaimedStatus === \"NOT_CLAIMED\"\n\nconst isPromoSignIn = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n}: PromoProps): boolean =>\n userSavedPreference !== \"AGENT\" && userStatus === \"UNKNOWN\" && nodeClaimedStatus === \"CLAIMED\"\n\nconst isPromoInvitedToSpace = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n userNodeAccess,\n}: PromoProps): boolean =>\n userSavedPreference !== \"AGENT\" &&\n (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n nodeClaimedStatus === \"CLAIMED\" &&\n userNodeAccess === \"NO_ACCESS\"\n\nconst isPromoToClaimThisNode = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n}: PromoProps): boolean =>\n userSavedPreference !== \"AGENT\" &&\n (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n nodeClaimedStatus === \"NOT_CLAIMED\"\n\nconst isPromoToNewDasboardOnCloud = ({\n userSavedPreference,\n userStatus,\n nodeLiveness,\n userNodeAccess,\n}: PromoProps): boolean =>\n !userSavedPreference &&\n (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n nodeLiveness === \"LIVE\" &&\n userNodeAccess === \"ACCESS_OK\"\n\nconst isNoInfoFallbackToAgent = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n nodeLiveness,\n userNodeAccess,\n}: PromoProps): boolean =>\n userSavedPreference === \"CLOUD\" &&\n !userStatus &&\n !nodeClaimedStatus &&\n !nodeLiveness &&\n !userNodeAccess\n\nconst isFallbackToAgent = ({\n userSavedPreference,\n userStatus,\n nodeClaimedStatus,\n nodeLiveness,\n userNodeAccess,\n}: PromoProps): boolean =>\n userSavedPreference !== \"AGENT\" &&\n (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n nodeClaimedStatus === \"CLAIMED\" &&\n nodeLiveness === \"NOT_LIVE\" &&\n userNodeAccess === \"ACCESS_OK\"\n\nexport const goToAgentDashboard = ({ userSavedPreference }: PromoProps) =>\n userSavedPreference === \"AGENT\"\n\nexport const goToCloud = ({\n userSavedPreference,\n userStatus,\n nodeLiveness,\n userNodeAccess,\n}: PromoProps) =>\n userSavedPreference === \"CLOUD\" &&\n (userStatus === \"LOGGED_IN\" || userStatus === \"EXPIRED_LOGIN\") &&\n nodeLiveness === \"LIVE\" &&\n userNodeAccess === \"ACCESS_OK\"\n\nconst modalStatusWithPromoFunctions: Record<\n MigrationModalPromos,\n (props: PromoProps) => boolean\n> = {\n [MigrationModalPromos.FALLBACK_TO_AGENT]: isFallbackToAgent,\n [MigrationModalPromos.NO_INFO_FALLBACK_TO_AGENT]: isNoInfoFallbackToAgent,\n [MigrationModalPromos.PROMO_TO_USE_NEW_DASHBAORD]: isPromoToNewDasboardOnCloud,\n [MigrationModalPromos.PROMO_CLAIM_NODE]: isPromoToClaimThisNode,\n [MigrationModalPromos.PROMO_IVNITED_TO_SPACE]: isPromoInvitedToSpace,\n [MigrationModalPromos.PROMO_SIGN_IN_CLOUD]: isPromoSignIn,\n [MigrationModalPromos.PROMO_SIGN_UP_CLOUD]: isPromoSignUp,\n}\n\nconst useMigrationModal = ({\n userStatus,\n nodeClaimedStatus,\n userNodeAccess,\n nodeLiveness,\n}: PromoProps) => {\n const [userSavedPreference, setUserPrefrence] = useLocalStorage<UserPreference>(\n \"USER_SAVED_PREFERENCE\"\n )\n\n const migrationModalPromo = useMemo<MigrationModalPromos>(() => {\n return Object.keys(modalStatusWithPromoFunctions).find(modalStatus => {\n return modalStatusWithPromoFunctions[modalStatus]({\n userStatus,\n nodeClaimedStatus,\n userNodeAccess,\n userSavedPreference,\n nodeLiveness,\n })\n }) as MigrationModalPromos\n }, [userStatus, nodeClaimedStatus, userNodeAccess, nodeLiveness, userSavedPreference])\n\n return {\n migrationModalPromoInfo: migrationmodalInfo[migrationModalPromo],\n migrationModalPromo,\n setUserPrefrence,\n userSavedPreference,\n }\n}\n\nexport default useMigrationModal\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 doesn't 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 overridden 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\">×</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 data-testid={`header-nodename-${hostname}`} 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} data-testid=\"header-options-button\">\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 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 data-testid=\"header-version-control-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 const after = start.toString()\n const before = end.toString()\n if (window.urlOptions.after !== after || window.urlOptions.before !== before) {\n window.urlOptions.netdataPanAndZoomCallback(true, after, before)\n }\n setHashParams({ after, before })\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 data-testid=\"header-news-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 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 useUserNodeAccessMessage from \"hooks/use-user-node-access\"\nimport { selectRegistry, selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { LOCAL_STORAGE_NEEDS_SYNC } from \"domains/dashboard/sagas\"\nimport { setOfflineAction } from \"@/src/domains/dashboard/actions\"\nimport { SIGN_IN_IFRAME_ID } from \"components/header/constants\"\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 useUserNodeAccessMessage()\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 (\n <IframeContainer as=\"iframe\" id={SIGN_IN_IFRAME_ID} src={signInIframeUrl} onLoad={onLoad} />\n )\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 data-testid=\"header-signin\"\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 { Text, NavigationTab, Icon } from \"@netdata/netdata-ui\"\nimport React from \"react\"\n\nconst CloudTab = ({ label, active, showBorderLeft, icon, onActivate }) => {\n const handleOnActivate = () => {\n if (active) return\n if (onActivate) onActivate()\n }\n return (\n <NavigationTab\n onActivate={handleOnActivate}\n icon={<Icon name={icon} size=\"small\" />}\n fixed\n closable={false}\n showBorderLeft={showBorderLeft}\n active={active}\n >\n <Text>{label}</Text>\n </NavigationTab>\n )\n}\n\nexport default CloudTab\n","import React from \"react\"\nimport {\n Flex,\n Button,\n Box,\n Text,\n H3,\n H4,\n Modal,\n ModalContent,\n ModalBody,\n ModalHeader,\n ModalCloseButton,\n ModalFooter,\n Icon,\n} from \"@netdata/netdata-ui\"\n\nimport GoToCloud from \"components/auth/signIn\"\n\nexport const TITLE = \"Discover the free benefits of Netdata Cloud\"\n\nconst DiscoverCloudModal = ({ closeModal, text, header, handleGoToCloud, image, video }) => {\n return (\n <Modal borderShadow backdrop={false}>\n <ModalContent background=\"modalBackground\">\n <ModalHeader>\n <Flex gap={2}>\n <Icon color=\"white\" name=\"netdata\" />\n <H3 margin={[0]}>{TITLE}:</H3>\n </Flex>\n\n <ModalCloseButton onClose={closeModal} />\n </ModalHeader>\n <ModalBody>\n <Flex column width={189} height={130}>\n <Flex padding={[0, 0, 4, 0]} column gap={4}>\n <Flex alignItems=\"center\">\n <H4 margin={[0]}>{header}</H4>\n <Box\n sx={{ marginLeft: \"auto\" }}\n data-testid=\"go-to-cloud-cta\"\n margin={[0, 2, 0, 0]}\n width={{ min: 40 }}\n >\n <GoToCloud utmParameters={{ campaign: \"discover_cloud\" }}>\n {({ link }) => (\n <Box\n label={\n <Text textTransform=\"none\" strong color=\"panel\">\n Sign in to Netdata Cloud!\n </Text>\n }\n width=\"100%\"\n onClick={() => handleGoToCloud({ link })}\n as={Button}\n small\n data-ga={\"go-to-cloud-button\"}\n data-testid=\"cta1-button\"\n />\n )}\n </GoToCloud>\n </Box>\n </Flex>\n {text()}\n </Flex>\n {image && (\n <Flex height=\"auto\" width=\"100%\" overflow=\"hidden\">\n <Box\n sx={{\n width: \"100%\",\n height: \"auto\",\n }}\n as=\"img\"\n src={image}\n ></Box>\n </Flex>\n )}\n {video && (\n <Flex height=\"100%\" width=\"100%\">\n <Box sx={{ width: \"100%\", height: \"100%\" }}>\n <iframe\n title={`discover-cloud-iframe}`}\n width=\"100%\"\n height=\"100%\"\n src={video}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </Box>\n </Flex>\n )}\n </Flex>\n </ModalBody>\n <ModalFooter></ModalFooter>\n </ModalContent>\n </Modal>\n )\n}\n\nexport default DiscoverCloudModal\n","import { Text } from \"@netdata/netdata-ui\"\nimport Anchor from \"@/src/components/anchor\"\nimport React from \"react\"\n\nconst TabsContentText = ({ children }) => <Text fontSize=\"16px\">{children}</Text>\n\nexport const TabsContent = {\n Home: {\n id: \"Home\",\n label: \"Home\",\n header: \"Home\",\n text: () => (\n <TabsContentText>\n The Home view in Netdata cloud provides summarized relevant information in an easily\n digestible display. You can see information about your nodes, data collection and retention\n stats, alerts, users and dashboards.\n </TabsContentText>\n ),\n icon: \"room_home\",\n image: \"images/home.png\",\n },\n nodeView: {\n id: \"nodeView\",\n label: \"Node View\",\n header: \"Node View\",\n text: () => (\n <>\n <TabsContentText>\n The single node view you are currently using will of course be available on Netdata Cloud\n as well. In addition, the charts and visualization on Netdata Cloud will be more flexible\n and powerful for troubleshooting than what is available on the agent.\n </TabsContentText>\n <TabsContentText>\n Netdata Cloud also comes with the Metric Correlations feature that lets you quickly find\n metrics and charts related to a particular window of interest that you want to explore\n further. By displaying the standard Netdata dashboard, filtered to show only charts that\n are relevant to the window of interest, you can get to the root cause sooner.\n </TabsContentText>\n </>\n ),\n icon: \"nodes_hollow\",\n image: \"images/nodeView.png\",\n },\n Overview: {\n id: \"Overview\",\n label: \"Overview\",\n header: \"Overview\",\n text: () => (\n <>\n <TabsContentText>\n The Overview tab is a great way to monitor your infrastructure using Netdata Cloud. While\n the interface might look similar to local dashboards served by an Agent, or even the\n single-node dashboards in Netdata Cloud, Overview uses composite charts. These charts\n display real-time aggregated metrics from all the nodes (or a filtered selection) in a\n given War Room.\n </TabsContentText>\n <TabsContentText>\n With Overview's composite charts, you can see your infrastructure from a single pane of\n glass, discover trends or anomalies, then drill down by grouping metrics by node and\n jumping to single-node dashboards for root cause analysis.\n </TabsContentText>\n <TabsContentText>\n Here's an example of a composite chart visualizing Disk I/O bandwidth from 5 different\n nodes in one chart.\n </TabsContentText>\n </>\n ),\n icon: \"room_overview\",\n image: \"images/overview.png\",\n },\n Nodes: {\n id: \"Nodes\",\n label: \"Nodes\",\n header: \"Nodes\",\n text: () => (\n <TabsContentText>\n The Nodes view in Netdata Cloud lets you see and customize key metrics from any number of\n Agent-monitored nodes and seamlessly navigate to any node's dashboard for troubleshooting\n performance issues or anomalies using Netdata's highly-granular metrics.\n </TabsContentText>\n ),\n icon: \"nodes_hollow\",\n image: \"images/nodes.jpg\",\n },\n Dashboards: {\n id: \"Dashboards\",\n label: \"Dashboards\",\n header: \"Dashboards\",\n text: () => (\n <TabsContentText>\n With Netdata Cloud, you can build new dashboards that target your infrastructure's unique\n needs. Put key metrics from any number of distributed systems in one place for a bird's eye\n view of your infrastructure.\n </TabsContentText>\n ),\n icon: \"dashboard\",\n image: \"images/dashboards.png\",\n },\n Alerts: {\n id: \"Alerts\",\n label: \"Alerts\",\n header: \"Alerts\",\n text: () => (\n <TabsContentText>\n The Alerts view gives you a high level of availability and performance information for every\n node you're monitoring with Netdata Cloud. It also offers an easy way to drill down into any\n particular alert by taking the user to the dedicated alert view from where the user can run\n metrics correlation or take further troubleshooting steps.\n </TabsContentText>\n ),\n icon: \"alarm\",\n image: \"images/alerts.jpg\",\n },\n Anomalies: {\n id: \"Anomalies\",\n label: \"Anomalies\",\n header: \"Anomaies\",\n text: () => (\n <TabsContentText>\n The Anomalies view on Netdata Cloud lets you quickly surface potentially anomalous metrics\n and charts related to a particular highlight window of interest using Anomaly Advisor.\n Anomalies are detected using per metric unsupervised machine learning running at the edge!\n </TabsContentText>\n ),\n icon: \"anomaliesLens\",\n video:\n \"https://user-images.githubusercontent.com/24860547/165943403-1acb9759-7446-4704-8955-c566d04ad7ab.mp4\",\n },\n Pricing: {\n id: \"Pricing\",\n label: \"Pricing\",\n header: \"Pricing\",\n text: () => (\n <TabsContentText>\n Netdata Cloud’s distributed architecture—with processing occurring at the individual\n nodes—enables us to add any number of users at marginal cost. Couple this with our upcoming\n paid plan with added functionality for enterprise customers, and it means we can commit to\n providing our current functionality for free, always.\n </TabsContentText>\n ),\n image: \"images/pricing.png\",\n icon: \"pricing\",\n },\n Privacy: {\n id: \"Privacy\",\n label: \"Privacy\",\n header: \"Privacy\",\n text: () => (\n <>\n <TabsContentText>\n Data privacy is very important to us. We firmly believe that your data belongs to you.\n This is why we don't store any metric data in Netdata Cloud.\n </TabsContentText>\n <TabsContentText>\n Your local installations of the Netdata Agent form the basis for the Netdata Cloud. All\n the data that you see in the web browser when using Netdata Cloud, is actually streamed\n directly from the Netdata Agent to the Netdata Cloud dashboard. The data passes through\n our systems, but it isn't stored. You can learn more about{\" \"}\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://learn.netdata.cloud/docs/agent/netdata-security\"\n >\n the Agent's security design\n </Anchor>{\" \"}\n design in the Agent documentation.\n </TabsContentText>\n <TabsContentText>\n However, to be able to offer the stunning visualizations and advanced functionality of\n Netdata Cloud, it does store a limited number of metadata. This metadata is ONLY available\n to Netdata and NEVER to any 3rd parties. You can learn more about what metadata is stored\n in Netdata cloud in our\n <Anchor\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href=\"https://learn.netdata.cloud/docs/cloud/data-privacy\"\n >\n {\" \"}\n documentation\n </Anchor>\n </TabsContentText>\n </>\n ),\n icon: \"privacy\",\n },\n}\n","import React from \"react\"\nimport {\n Text,\n Drop,\n ModalContent,\n ModalBody,\n ModalHeader,\n ModalCloseButton,\n ModalFooter,\n Flex,\n Button,\n Box,\n H3,\n H4,\n Icon,\n} from \"@netdata/netdata-ui\"\n\nimport GoToCloud from \"components/auth/signIn\"\n\nexport const TITLE = \"Discover the free benefits of Netdata Cloud\"\n\nconst DiscoverCloudDrop = ({\n parentRef,\n isDropdownOpen,\n closeDropdown,\n text,\n header,\n handleGoToCloud,\n image,\n video,\n}) => {\n if (parentRef.current && isDropdownOpen)\n return (\n <Drop\n backdrop\n data-testid=\"selectedNodesDropdown\"\n onEsc={closeDropdown}\n align={{ top: \"bottom\", left: \"left\" }}\n target={parentRef.current}\n onClickOutside={closeDropdown}\n >\n <ModalContent background=\"modalBackground\">\n <ModalHeader>\n <Flex gap={2}>\n <Icon color=\"white\" name=\"netdata\" />\n <H3 margin={[0]}>{TITLE}:</H3>\n </Flex>\n\n <ModalCloseButton onClose={closeDropdown} />\n </ModalHeader>\n <ModalBody>\n <Flex column width={189} height={130}>\n <Flex padding={[0, 0, 4, 0]} column gap={4}>\n <Flex alignItems=\"center\">\n <H4 margin={[0]}>{header}</H4>\n <Box\n sx={{ marginLeft: \"auto\" }}\n data-testid=\"go-to-cloud-cta\"\n margin={[0, 2, 0, 0]}\n width={{ min: 40 }}\n >\n <GoToCloud utmParameters={{ campaign: \"discover_cloud\" }}>\n {({ link }) => (\n <Box\n label={\n <Text textTransform=\"none\" strong color=\"panel\">\n Sign in to Netdata Cloud!\n </Text>\n }\n width=\"100%\"\n onClick={() => handleGoToCloud({ link })}\n data-testid=\"cta1-button\"\n as={Button}\n small\n data-ga={\"go-to-cloud-button\"}\n />\n )}\n </GoToCloud>\n </Box>\n </Flex>\n {text()}\n </Flex>\n {image && (\n <Flex height=\"auto\" width=\"100%\" overflow=\"hidden\">\n <Box\n sx={{\n width: \"100%\",\n height: \"auto\",\n }}\n as=\"img\"\n src={image}\n ></Box>\n </Flex>\n )}\n {video && (\n <Flex height=\"100%\" width=\"100%\">\n <Box sx={{ width: \"100%\", height: \"100%\" }}>\n <iframe\n title={`discover-cloud-iframe}`}\n width=\"100%\"\n height=\"100%\"\n src={video}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </Box>\n </Flex>\n )}\n </Flex>\n </ModalBody>\n <ModalFooter></ModalFooter>\n </ModalContent>\n </Drop>\n )\n\n return null\n}\n\nexport default DiscoverCloudDrop\n","import React, { useState, useRef } from \"react\"\nimport { Text, Flex, NavigationTabs } from \"@netdata/netdata-ui\"\n\nimport CloudTab from \"./cloudTab\"\nimport { TITLE } from \"./discoverCloudModal\"\n\nimport { callAll } from \"@/src/utils/utils\"\nimport { TabsContent } from \"./contents\"\n\nimport DiscoverCloudDrop from \"./discoverCloudDrop\"\n\nconst Wrapper = Flex\nconst InnerPositioner = Flex\n\nconst DiscoverCloud = () => {\n const [isModalOpen, setIsModalOpen] = useState(false)\n const [selectedModalContent, setSelectedModalContent] = useState(null)\n const dropDownParentRef = useRef()\n\n const handleOpenModal = () => {\n setIsModalOpen(true)\n }\n\n const handleCloseModal = () => {\n setIsModalOpen(false)\n }\n\n const handleGoToCloud = ({ link }) => {\n window.location.href = link\n }\n\n const handleSetModalContent = content => {\n setSelectedModalContent(content)\n }\n const handleResetModalContent = () => {\n setSelectedModalContent(null)\n }\n\n return (\n <Wrapper padding={[0, 0, 0, 4]} position=\"relative\" height={15}>\n <InnerPositioner\n padding={[4, 2, 4, 2]}\n gap={4}\n height=\"100%\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <Text color=\"primary\">{TITLE}:</Text>\n <Flex ref={dropDownParentRef}>\n <NavigationTabs>\n {Object.keys(TabsContent).map((key, index) => {\n const { label, icon, id } = TabsContent[key]\n const selectedContentId = selectedModalContent ? selectedModalContent.id : null\n return (\n <CloudTab\n key={key}\n icon={icon}\n active={id === selectedContentId}\n label={label}\n showBorderLeft={index === 0}\n onActivate={callAll(handleOpenModal, () =>\n handleSetModalContent(TabsContent[key])\n )}\n />\n )\n })}\n </NavigationTabs>\n </Flex>\n </InnerPositioner>\n <DiscoverCloudDrop\n parentRef={dropDownParentRef}\n isDropdownOpen={isModalOpen}\n {...selectedModalContent}\n closeDropdown={callAll(handleCloseModal, handleResetModalContent)}\n handleGoToCloud={handleGoToCloud}\n />\n {/* {isModalOpen && selectedModalContent && (\n <DiscoverCloudModal\n {...selectedModalContent}\n closeModal={callAll(handleCloseModal, handleResetModalContent)}\n handleGoToCloud={handleGoToCloud}\n />\n )} */}\n </Wrapper>\n )\n}\n\nexport default DiscoverCloud\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Box } from \"@netdata/netdata-ui\"\nimport Node from \"./node\"\nimport Options from \"./options\"\nimport Version from \"./version\"\nimport GlobalControls from \"./globalControls\"\nimport Alarms from \"./alarms\"\nimport News from \"./news\"\nimport Timezone from \"./timezone\"\nimport SignIn from \"./signIn\"\nimport { CloudConnectionStatus } from \"./ACLK\"\nimport { DiscoverCloud } from \"@/src/components/discover-cloud\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport { useSelector } from \"react-redux\"\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 = () => {\nconst cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return <Wrapper>\n <Flex alignItems=\"center\" gap={3}>\n <Node />\n </Flex>\n <Flex justifyContent=\"end\" alignItems=\"center\" gap={3}>\n <CloudConnectionStatus />\n <Version />\n <News />\n <Options />\n <Timezone />\n <GlobalControls />\n <Alarms />\n <SignIn />\n </Flex>\n {cloudEnabled&& <Box sx={{ background: \"#272B30\" }} position=\"absolute\" top=\"52px\" left=\"0px\" right=\"0px\">\n <DiscoverCloud />\n </Box>} \n</Wrapper>\n}\n\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.location.href = link\n }\n return (\n <SignIn utmParameters={{ content: \"userSettings\" }}>\n {({ isRegistry, link, onSignIn }) => (\n <Text onClick={isRegistry ? e => onClick(e, link) : onSignIn}>Sign in</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: (\n <SignOut\n data-testid=\"signout-button-sidebar\"\n flavour=\"borderless\"\n height={{ max: \"18px\" }}\n />\n ),\n },\n ]\n : [{ children: <SignInItem /> }]),\n ],\n [signedIn]\n )\n\n return (\n <ThemeProvider theme={DarkTheme}>\n <Button\n data-testid=\"avatar-button-sidebar\"\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\"\nimport { useSelector } from \"react-redux\"\nimport { Icon, 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\"\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 <Icon color=\"success\" name=\"netdataPress\" height=\"32px\" width=\"32px\" />\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.find(host => host.hostname === hostname)?.reachable || false,\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 styled from \"styled-components\"\nimport { getSizeBy, getColor, Icon, TextNano, Text } from \"@netdata/netdata-ui\"\n\nexport const NodesContainer = styled.div`\n .mdc-list-item {\n padding: 0 0;\n padding-left: 0;\n }\n .rmwc-collapsible-list__children {\n .mdc-list-item {\n padding: 0 0;\n padding-left: 0;\n height: ${getSizeBy(4)};\n }\n }\n .rmwc-collapsible-list__handle {\n .mdc-list-item {\n padding: 0 ${getSizeBy(2)};\n }\n }\n .mdc-list-item__meta {\n color: ${getColor(\"bright\")};\n }\n .mdc-list-item:before {\n background: none;\n }\n`\n\nexport const ListItem = styled.div`\n width: 100%;\n min-height: ${getSizeBy(3)};\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n cursor: pointer;\n justify-content: space-between;\n`\n\nexport const TrashIcon = styled(Icon)`\n fill: #35414a;\n margin-right: ${getSizeBy(2)};\n transition: opacity 0.4s ease-in;\n &:hover {\n opacity: 0.6;\n }\n`\n\nexport const StyledIcon = styled(Icon)`\n flex-shrink: 0;\n flex-grow: 0;\n margin-right: ${getSizeBy(2)};\n fill: ${getColor([\"gray\", \"arsenic\"])};\n`\n\n// @ts-ignore todo extend interface in dashboard due to lack of types in netdata-ui\nexport const NodeUrl = styled(TextNano.withComponent(\"a\"))`\n text-decoration: none;\n margin-left: ${getSizeBy(5)};\n color: #aeb3b7;\n max-width: 145px;\n word-wrap: break-word;\n &:hover {\n color: inherit; // overwrite bootstrap\n text-decoration: none;\n }\n`\n\n// @ts-ignore todo\nexport const NodeName = styled(Text.withComponent(\"a\"))`\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n min-width: 0;\n white-space: nowrap;\n`\n","import React, { useCallback, useState } from \"react\"\nimport { CollapsibleList, SimpleListItem } from \"@rmwc/list\"\nimport \"@material/list/dist/mdc.list.css\"\nimport \"@rmwc/list/collapsible-list.css\"\nimport \"@rmwc/icon/icon.css\"\nimport { Box, Flex, Text } from \"@netdata/netdata-ui\"\n\nimport truncateMiddle from \"utils/truncateMiddle\"\nimport { naturalSortCompare } from \"domains/dashboard/utils/sorting\"\nimport { MASKED_DATA } from \"domains/global/constants\"\nimport { MenuList } from \"components/menus\"\n\nimport { NodesContainer, ListItem, StyledIcon, NodeUrl, NodeName, TrashIcon } from \"./styled\"\n\nconst Node = ({ name, alternateUrls, machineGuid }) => (\n <CollapsibleList\n handle={\n <SimpleListItem\n text={\n <>\n <StyledIcon name=\"node\" />\n <NodeName\n color=\"bright\"\n href=\"\"\n onClick={event => {\n event.preventDefault() // prevent navigating to url\n event.stopPropagation()\n window.gotoServerModalHandler(machineGuid)\n }}\n >\n {name}\n </NodeName>\n </>\n }\n metaIcon={alternateUrls.length && \"chevron_right\"}\n />\n }\n >\n <Box margin={[2, 0, 0]}>\n {alternateUrls.map(url => (\n <ListItem key={url}>\n <NodeUrl href={url}>{truncateMiddle(url, 50)}</NodeUrl>\n <TrashIcon\n name=\"trashcan\"\n size=\"small\"\n onClick={() => {\n window.deleteRegistryModalHandler(machineGuid, name, url)\n }}\n />\n </ListItem>\n ))}\n </Box>\n </CollapsibleList>\n)\n\nexport const VisitedNodes = ({ machinesArray }) => {\n const sortedMachines = machinesArray\n .sort((a, b) => naturalSortCompare(a.name, b.name))\n .filter(({ url }) => url !== MASKED_DATA)\n\n const [listOpen, setListOpen] = useState(true)\n const toggleListOpen = useCallback(() => setListOpen(o => !o), [])\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 Visited Nodes\n </Text>\n <StyledIcon right={!listOpen} name=\"chevron_down\" size=\"small\" color=\"text\" />\n </Flex>\n }\n >\n <NodesContainer column gap={2}>\n {sortedMachines.map(({ name, alternateUrls, guid, url }) => (\n <Node\n alternateUrls={alternateUrls}\n key={`${name}-${guid}`}\n machineGuid={guid}\n name={name}\n url={url}\n />\n ))}\n </NodesContainer>\n </MenuList>\n )\n}\n\nexport default VisitedNodes\n","export default (text, maxLength) => {\n if (text.length <= maxLength) return text\n\n const spanLength = Math.floor((maxLength - 3) / 2)\n return `${text.substring(0, spanLength)}...${text.substring(text.length - spanLength)}`\n}\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\"\nimport VisitedNodes from \"./visitedNodes\"\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 machinesArray={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, { useState, useCallback } from \"react\"\nimport GoToCloud from \"components/auth/signIn\"\n\nimport {\n Modal,\n ModalContent,\n ModalBody,\n ModalFooter,\n ModalHeader,\n Text,\n Flex,\n H3,\n Button,\n Box,\n Checkbox,\n} from \"@netdata/netdata-ui\"\n\nconst campaign = \"agent_nudge_to_cloud\"\n\nconst MigrationModal = ({\n migrationModalPromoInfo,\n setUserPrefrence,\n closeModal,\n savePromoRemindMeSelection,\n migrationModalPromo,\n requestRefreshOfAccess,\n}) => {\n const [isRememberChoiceChecked, setIsRememberChoiceChecked] = useState(false)\n\n const handleCheckBoxChange = e => {\n setIsRememberChoiceChecked(e.currentTarget.checked)\n }\n\n const handleClickedCTA1 = useCallback(\n ({ link, toPath }) => {\n const { CTA1 } = migrationModalPromoInfo\n\n if (CTA1.action === \"NAVIGATE\") {\n if (isRememberChoiceChecked) {\n setUserPrefrence(CTA1.userPreference)\n savePromoRemindMeSelection(isRememberChoiceChecked)\n }\n if (toPath !== \"agent\") window.location.href = link\n closeModal()\n } else if (CTA1.action === \"REFRESH\") {\n requestRefreshOfAccess()\n }\n },\n [\n migrationModalPromoInfo,\n setUserPrefrence,\n isRememberChoiceChecked,\n requestRefreshOfAccess,\n savePromoRemindMeSelection,\n closeModal,\n ]\n )\n\n const handleClickedCTA2 = useCallback(() => {\n const { CTA2 } = migrationModalPromoInfo\n if (isRememberChoiceChecked) {\n setUserPrefrence(CTA2.userPreference)\n savePromoRemindMeSelection(isRememberChoiceChecked)\n }\n if (CTA2.action === \"NAVIGATE\") {\n } else if (CTA2.action === \"REFRESH\") {\n requestRefreshOfAccess()\n }\n closeModal()\n }, [\n migrationModalPromoInfo,\n setUserPrefrence,\n isRememberChoiceChecked,\n requestRefreshOfAccess,\n savePromoRemindMeSelection,\n closeModal,\n ])\n\n return migrationModalPromoInfo ? (\n <Modal>\n <ModalContent width={180} background=\"modalBackground\">\n <ModalHeader>\n <H3 margin={[0]}>{migrationModalPromoInfo.title}</H3>\n </ModalHeader>\n <ModalBody>\n <Flex padding={[0, 0, 4, 0]} column gap={3}>\n {typeof migrationModalPromoInfo.text.header === \"function\" ? (\n migrationModalPromoInfo.text.header({})\n ) : (\n <Text>{migrationModalPromoInfo.text.header}</Text>\n )}\n {migrationModalPromoInfo.text.bullets.length > 0 && (\n <Flex column gap={3}>\n <Flex column gap={1} as={\"ul\"}>\n {migrationModalPromoInfo.text.bullets.map(bullet => {\n if (typeof bullet === \"function\") {\n return <li key={bullet}>{bullet()}</li>\n }\n return (\n <li key={bullet}>\n <Text>{bullet}</Text>\n </li>\n )\n })}\n </Flex>\n </Flex>\n )}\n {migrationModalPromoInfo.text.footer && (\n <Text data-testid=\"body-footer\">{migrationModalPromoInfo.text.footer}</Text>\n )}\n </Flex>\n </ModalBody>\n <ModalFooter>\n <Box margin={[0, \"auto\", 0, 0]}>\n <Checkbox\n data-ga={`${migrationModalPromo}::click-remind-me::ad`}\n data-testid=\"remind-me-checkbox\"\n checked={isRememberChoiceChecked}\n onChange={handleCheckBoxChange}\n label={migrationModalPromoInfo.tickBoxOption.text}\n />\n </Box>\n <Box data-testid=\"cta1\" margin={[0, 2, 0, 0]} width={{ min: 40 }}>\n <GoToCloud utmParameters={{ content: migrationModalPromo, campaign }}>\n {({ link }) => (\n <Button\n data-ga={`${migrationModalPromo}::click-ct1::ad`}\n textTransform=\"none\"\n data-testid=\"cta1-button\"\n onClick={() =>\n handleClickedCTA1({ link, toPath: migrationModalPromoInfo.CTA1.toPath })\n }\n width=\"100%\"\n label={migrationModalPromoInfo.CTA1.text}\n />\n )}\n </GoToCloud>\n </Box>\n {migrationModalPromoInfo.CTA2 && (\n <Box\n data-ga={`${migrationModalPromo}::click-ct2::ad`}\n onClick={handleClickedCTA2}\n height={10}\n className=\"btn btn-default\"\n data-testid=\"cta2\"\n width={{ min: 40 }}\n >\n <Box as={Text} sx={{ fontWeight: \"500\", lineHeight: \"25px\" }}>\n {migrationModalPromoInfo.CTA2.text}\n </Box>\n </Box>\n )}\n </ModalFooter>\n </ModalContent>\n </Modal>\n ) : null\n}\n\nexport default MigrationModal\n","import React, { useState, useEffect, useMemo } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { useSelector } from \"react-redux\"\n\nimport { selectUserNodeAccess } from \"domains/global/selectors\"\nimport {\n MigrationModal,\n useMigrationModal,\n PromoProps,\n goToCloud,\n goToAgentDashboard,\n} from \"@/src/domains/dashboard/components/migration-modal\"\nimport { selectSignInUrl } from \"domains/global/selectors\"\nimport { useRequestRefreshOfAccessMessage } from \"hooks/use-user-node-access\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\n// const PROMO_SIGN_UP_CLOUD: PromoProps = { userStatus: \"UNKNOWN\", nodeClaimedStatus: \"NOT_CLAIMED\" } //CLOUD\n// const PROMO_SIGN_IN_CLOUD: PromoProps = {\n// userStatus: \"UNKNOWN\",\n// nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n// const PROMO_IVNITED_TO_SPACE: PromoProps = {\n// userStatus: \"LOGGED_IN\",\n// nodeClaimedStatus: \"CLAIMED\",\n// userNodeAccess: \"NO_ACCESS\",\n// } //CLOUD\n\n// const PROMO_CLAIM_NODE: PromoProps = { userStatus: \"LOGGED_IN\", nodeClaimedStatus: \"NOT_CLAIMED\" } //CLOUD\n// const PROMO_TO_USE_NEW_DASHBAORD: PromoProps = {\n// userStatus: \"LOGGED_IN\",\n// nodeLiveness: \"LIVE\",\n// userNodeAccess: \"ACCESS_OK\",\n// } //UNDEFIND\n\n// const FALLBACK_TO_AGENT: PromoProps = {\n// userStatus: \"LOGGED_IN\",\n// nodeLiveness: \"NOT_LIVE\",\n// userNodeAccess: \"ACCESS_OK\",\n// nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n\n// const NO_INFO_FALLBACK_TO_AGENT: PromoProps = {\n// userStatus: undefined,\n// nodeLiveness: undefined,\n// userNodeAccess: undefined,\n// nodeClaimedStatus: undefined,\n// } //CLOUD\n\n// const GO_TO_CLOUD: PromoProps = {\n// userStatus: \"LOGGED_IN\",\n// nodeLiveness: \"LIVE\",\n// userNodeAccess: \"ACCESS_OK\",\n// nodeClaimedStatus: \"CLAIMED\",\n// } //CLOUD\n\nconst MigrationManager = () => {\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n const registry = useSelector(selectRegistry)\n\n const cloudUrl = useSelector(state =>\n selectSignInUrl({ content: \"agent-auto-redirect\", term: registry.machineGuid })(state as any)\n )\n\n const linkToCoud = useMemo(() => {\n const { href } = window.location\n const redirectURI = encodeURIComponent(href)\n return `${cloudUrl}&redirect_uri=${redirectURI}`\n }, [cloudUrl])\n\n const userNodeAccess = useSelector(selectUserNodeAccess) as PromoProps\n const [isModalOpen, setModalOpen] = useState(false)\n const { migrationModalPromoInfo, setUserPrefrence, userSavedPreference, migrationModalPromo } =\n useMigrationModal({\n ...userNodeAccess,\n })\n\n const preferenceID = migrationModalPromoInfo?.tickBoxOption.preferenceID || \"\"\n\n /**\n * There is seem to be a bug when we are using the useLocalStorage,\n * the value to be returned does not change when preferenceID is changing.\n * For that reason we access the localStorage directly\n */\n const [, savePromoRemindMeSelection] = useLocalStorage(preferenceID)\n const hasPromoSelectionSaved = localStorage.getItem(preferenceID)\n\n const closeModal = () => {\n setModalOpen(false)\n }\n\n const isPromoEligibleForShow =\n cloudEnabled &&\n migrationModalPromoInfo &&\n isModalOpen &&\n (!hasPromoSelectionSaved || hasPromoSelectionSaved === \"undefined\")\n\n const requestRefreshOfAccess = useRequestRefreshOfAccessMessage()\n\n /** We are delaying the show of modal because some time the userNodeAccess is equal to null\n * and only for a few seconds we are showing the NO_INFO modal an the the userNodeAccess\n * has a new value and we show a second modal on top of the other. We dont want this\n * behaviour\n */\n useEffect(() => {\n let showModalTimer = setTimeout(() => setModalOpen(true), 4000)\n return () => {\n clearTimeout(showModalTimer)\n }\n }, [])\n\n useEffect(() => {\n if (goToCloud({ userSavedPreference, ...userNodeAccess })) {\n window.location.href = linkToCoud\n }\n }, [linkToCoud, userNodeAccess, userSavedPreference])\n\n useEffect(() => {\n if (goToAgentDashboard({ userSavedPreference })) console.log(\"Lets go to Agent\")\n }, [userSavedPreference])\n\n useEffect(() => {\n if (isPromoEligibleForShow) {\n document.documentElement.style.overflow = \"hidden\"\n } else {\n document.documentElement.style.overflow = \"auto\"\n }\n }, [isModalOpen, isPromoEligibleForShow])\n\n if (isPromoEligibleForShow)\n return (\n <MigrationModal\n savePromoRemindMeSelection={savePromoRemindMeSelection}\n migrationModalPromoInfo={migrationModalPromoInfo}\n setUserPrefrence={setUserPrefrence}\n closeModal={closeModal}\n migrationModalPromo={migrationModalPromo}\n requestRefreshOfAccess={requestRefreshOfAccess}\n />\n )\n\n return null\n}\n\nexport default MigrationManager\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 { selectCloudBaseUrl, selectHasFetchedInfo, selectTheme } 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\nimport { MigrationManager } from \"@/src/domains/dashboard/components/migration-manager\"\nimport { isDemo } from \"./utils/is-demo\"\nimport { Box } from \"@netdata/netdata-ui\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\n\nconst FakeMargin = Box\n\n// support legacy code\nwindow.Ps = Ps\n\nconst App: React.FC = () => {\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\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 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 <></>\n {chartsMetadata && cloudBaseURL && hasFetchedInfo && haveDOMReadyForParsing && (\n <>\n <Layout printMode={isPrintMode}>\n {isDemo ? null : <MigrationManager />}\n {hasFetchDependencies && (\n <>\n <Portals key={refreshHelper} />\n <SidebarSocialMediaPortal>\n <SidebarSocialMedia />\n </SidebarSocialMediaPortal>\n {isPrintMode && <PrintModal />}\n </>\n )}\n </Layout>\n {cloudEnabled && <FakeMargin height={15} />}\n </>\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","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","/* 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]) => (value === undefined ? key : `${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","import { useEffect, useCallback, useState } from \"react\"\n\ntype IframesMessageType =\n | \"spaces\"\n | \"workspaces\"\n | \"hello-from-spaces-bar\"\n | \"hello-from-space-panel\"\n | \"hello-from-sign-in\"\n | \"is-signed-in\"\n | \"streamed-hosts-data\"\n | \"has-focus\"\n | \"iframe-focus-change\"\n | \"synced-private-registry\"\n | \"set-is-logout-dropdown-opened\"\n | \"user-node-access\"\n | \"request-refresh-access\"\n\ninterface IframesMessage<T = unknown> {\n type: IframesMessageType\n payload: T\n}\n\nexport const sendToChildIframe = (\n htmlIframeElement: HTMLIFrameElement | string,\n message: IframesMessage\n) => {\n const iframeElement =\n typeof htmlIframeElement === \"string\"\n ? (document.getElementById(htmlIframeElement) as HTMLIFrameElement)\n : htmlIframeElement\n\n if (iframeElement.contentWindow) {\n iframeElement.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(\n 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 },\n [callback, messageType]\n )\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","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","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","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\nexport const 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\"))\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\nexport const selectUserNodeAccess = createSelector(selectGlobal, global => global.userNodeAccess)\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Text, getColor } from \"@netdata/netdata-ui\"\n\nconst BaseAnchor = styled(\"a\")`\n && {\n color: ${getColor(\"primary\")};\n\n :hover {\n color: ${getColor(\"primary\")};\n }\n\n :visited {\n color: ${getColor(\"accent\")};\n }\n }\n`\n\ntype AnchorProps = React.ComponentPropsWithRef<\"a\"> & {\n Component?: React.ElementType\n}\n\nconst Anchor = ({ Component = Text, ...rest }: AnchorProps): any => (\n <Component as={BaseAnchor} {...rest} />\n)\n\nexport default Anchor\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","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"],"sourceRoot":""}
\ No newline at end of file |