summaryrefslogtreecommitdiffstats
path: root/web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map')
-rw-r--r--web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map1
1 files changed, 0 insertions, 1 deletions
diff --git a/web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map b/web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map
deleted file mode 100644
index 74b55ce30..000000000
--- a/web/gui/dashboard/static/js/main.8aa70c75.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["domains/global/actions.ts","domains/global/options.ts","utils/is-demo.ts","utils/units-conversion.ts","components/button/button.tsx","domains/chart/components/toolbox-button.tsx","domains/global/selectors.ts","domains/chart/components/resize-handler.tsx","utils/index.ts","utils/name-2-id.ts","domains/chart/actions.ts","domains/global/reducer.ts","components/icon.tsx","domains/chart/reducer.ts","domains/chart/utils/transformDataAttributes.ts","main.js","domains/global/constants.ts","utils/utils.ts","utils/server-detection.ts","vendor/d3pie-0.2.1-netdata-3.js","domains/chart/selectors.ts","domains/dashboard/actions.ts","domains/chart/constants.ts","domains/chart/utils/seconds4human.ts","../public/lib/dygraph-c91c859.min.js","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","utils/hash-utils.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/components/lib-charts/proceeded-chart-disclaimer.tsx","domains/chart/components/lib-charts/alarmBadge.js","domains/chart/components/lib-charts/dygraph-chart.tsx","domains/chart/hooks/useDygraphBadge.js","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/drawBoxes.ts","domains/chart/components/lib-charts/group-box-chart/events.ts","domains/chart/components/lib-charts/group-box-chart/getAlign.ts","domains/chart/components/lib-charts/group-box-chart/groupBox.tsx","domains/chart/components/lib-charts/group-box-chart/groupBoxes.tsx","domains/chart/components/lib-charts/group-box-chart/legend.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/getLabel.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/separator.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/header.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/tabs.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/section.tsx","domains/chart/utils/get-portal-node-styles.ts","hooks/use-common-intersection.ts","domains/chart/components/invisible-searchable-text.tsx","domains/chart/components/disable-out-of-view.tsx","domains/chart/components/chart-container/chart-container.tsx","domains/dashboard/utils/netdata-dashboard.ts","domains/chart/components/lib-charts/group-box-chart/kubernetes/chartOverview.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/chart.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/item.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/dateSection.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/metrics.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/context.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/list.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/popover.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/index.tsx","domains/chart/components/lib-charts/group-box-chart/kubernetes/transform.ts","domains/chart/components/abstract-chart.tsx","hooks/use-show-value-outside.ts","domains/chart/components/chart.tsx","styles/layout-constants.ts","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.ts","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/header/options/index.js","components/app-header/components/version-control/version-control.tsx","components/header/version.js","components/mdx-components/dropdown/styled.ts","services/ui-service/ui-theming.ts","rmwc-theme-provider.tsx","components/date-picker/styled.ts","components/mdx-components/dropdown/dropdown.tsx","components/date-picker/assets/header-clock.svg","components/date-picker/short-pick.tsx","components/date-picker/utils.ts","components/date-picker/assets/arrow.svg","components/date-picker/assets/calendar.svg","components/date-picker/accessor-element.tsx","components/date-picker/custom-short-pick.tsx","components/date-picker/assets/month_arrow_l.svg","components/date-picker/assets/month_arrow_r.svg","components/date-picker/picker.tsx","hooks/use-click-outside.ts","components/date-picker/redux-wrapped-picker.tsx","components/header/dateTimePicker.js","components/header/pill/styled.js","components/header/pill/index.js","components/header/alarms.js","components/news/header.js","components/news/item/image.js","components/news/item/anchor.js","components/news/item/index.js","components/news/container.js","components/news/index.js","components/header/news/dataSource/index.js","components/header/news/index.js","components/auth/signIn/index.js","utils/post-message.ts","components/auth/signIn/iframe.js","components/auth/signIn/useCheckSignInStatus.js","components/header/signIn/index.js","components/header/index.js","components/sidebar/spaces/expandButton.js","components/menus/item.js","components/menus/list.js","components/menus/styled.js","components/auth/signOut/index.js","components/sidebar/spaces/userSettings.js","components/sidebar/spaces/spacesSkeleton.js","components/sidebar/spaces/spacesIframe.js","components/sidebar/netdataLogo.js","components/sidebar/spaces/index.js","domains/dashboard/utils/sorting.ts","components/sidebar/space/nodes.js","components/sidebar/space/replicatedNodes/anchor.js","components/sidebar/space/replicatedNodes/node.js","components/sidebar/space/replicatedNodes/index.js","components/sidebar/space/spacePanelIframe.js","components/sidebar/space/prompts/signIn/promptContent.js","components/sidebar/space/prompts/signIn/index.js","components/sidebar/space/prompts/offline/noNetwork.js","components/sidebar/space/prompts/offline/index.js","components/sidebar/space/index.js","components/sidebar/index.js","components/layout/index.js","utils/map-theme.ts","App.tsx","hooks/use-registry.ts","hooks/use-alarms.ts","hooks/use-info.ts","domains/dashboard/hooks/use-charts-metadata.ts","domains/dashboard/hooks/useAlarmFromUrl.js","index.tsx","domains/chart/utils/legend-utils.ts","utils/date-time.ts","utils/env.ts","domains/dashboard/constants.ts","store/redux-separate-context.ts","utils/createRequestAction.ts"],"names":["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","SYNC_PAN_AND_ZOOM","INITIAL_OPTIONS","Boolean","window","netdataShowHelp","netdataNoBootstrap","getOptionsMergedWithLocalStorage","optionsFromLocalStorage","Object","keys","localStorage","filter","key","startsWith","map","replace","localStorageKeyToOption","parsed","value","getItem","removeItem","JSON","parse","e","console","log","getItemFromLocalStorage","o","values","overridenOptions","mergeAll","mergeRight","optionsMergedWithLocalStorage","initialLegendRight","clearLocalStorage","forEach","LOCALSTORAGE_HEIGHT_KEY_PREFIX","isPrintMode","location","hash","split","includes","isDemo","hostname","document","endsWith","getIsDemo","currentTemperatureSetting","currentSecondsAsTimeSetting","zeropad","x","toString","scalableUnits","pps","Kpps","Mpps","bytes","kilobytes","megabytes","gigabytes","terabytes","Hz","kHz","MHz","GHz","THz","PHz","EHz","ZHz","B","KiB","MiB","GiB","TiB","PiB","KB","MB","GB","TB","PB","EB","EiB","convertibleUnits","Celsius","Fahrenheit","check","convert","celsius","fahrenheit","seconds","time","unitsConversionCreator","seconds2time","milliseconds","max","tms","Math","round","millisecondsRet","floor","millisecondsReturn","minutes","identity","latest","globalReset","this","secondsReturn","abs","days","hours","get","uuid","min","units","desiredUnits","commonUnitsName","switchUnitsCallback","temperatureSetting","secondsAsTimeSetting","undefined","newConvertFunction","tunits","tdivider","scalableUnitsGroup","unit","unitDivider","commonUnitsKey","t","divider","commonUnits","Button","React","ref","children","className","rest","type","classNames","ToolboxButton","iconType","onClick","onDoubleClick","onMouseDown","onTouchStart","popoverContent","popoverTitle","buttonRef","useRef","showHelp","useSelector","selectShowHelp","useEffect","current","$","popover","container","animation","html","trigger","placement","delay","show","NETDATA","options","show_help_delay_show_ms","hide","show_help_delay_hide_ms","title","content","createSelectAssignedColors","args","state","keyName","getKeyForCommonColorsState","substate","commonColorsKeys","assigned","selectGlobal","global","selectCommonMin","createSelector","_","commonMinKey","globalState","commonMin","selectCommonMax","commonMaxKey","commonMax","selectGlobalSelection","prop","selectGlobalSelectionMaster","selectGlobalPanAndZoom","selectDefaultAfter","selectGlobalChartUnderlay","selectHasWindowFocus","selectSnapshot","selectRegistry","selectCloudBaseUrl","selectSignInUrl","hasSignedInBefore","registry","cloudBaseURL","name","encodeURIComponent","origin","alwaysEndWithSlash","pathname","machineGuid","utmUrlSuffix","selectIsUsingGlobalRegistry","registryServer","selectIsCloudEnabled","isCloudEnabled","isHelloCallError","selectHasFetchedInfo","selectFullInfoPayload","selectHasStartedAlarms","path","selectActiveAlarms","alarms","activeAlarms","selectAlarm","alarm","selectSpacePanelIsActive","selectSpacePanelTransitionEndIsActive","selectOptions","createSelectOption","optionName","selectDestroyOnHide","selectStopUpdatesWhenFocusIsLost","selectShouldEliminateZeroDimensions","selectIsAsyncOnScroll","selectSyncSelection","selectSyncPanAndZoom","selectTheme","selectPanAndZoomDataPadding","selectSmoothPlot","selectUnitsScalingMethod","selectTemperatureSetting","selectSecondsAsTimeSetting","selectTimezoneSetting","selectChartsMetadata","chartsMetadata","data","selectChartMetadataFromChartsCall","chartId","allMetadata","charts","LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD","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","setItem","onMouseMove","onTouchMove","addEventListener","onTouchEnd","removeEventListener","onMouseEnd","stopPropagation","name2id","s","fetchDataAction","fetchDataCancelAction","fetchDataForSnapshotAction","snapshotExportResetAction","fetchChartAction","setChartPanAndZoomAction","resetChartPanAndZoomAction","clearChartStateAction","fetchInfoAction","initialState","currentSelectionMasterId","globalPanAndZoom","defaultAfter","isMainJs","getInitialAfterFromWindow","globalChartUnderlay","hoveredX","hasWindowFocus","hasFocus","spacePanelIsActive","spacePanelTransitionEndIsActive","hasFetchedInfo","hasFetchedHello","isCloudAvailable","isAgentClaimed","isACLKAvailable","hasStartedInfo","isFetchingHello","fullInfoPayload","personGuid","registryMachines","registryMachinesArray","snapshot","hasStartedAlarms","isFetching","isFetchingError","globalReducer","createReducer","colorsAttribute","commonColorsAttribute","chartContext","hasCustomColors","length","hasLastOnly","array","last","createCommonColorsKeysSubstate","custom","init","shouldCopyTheme","available","themes","colors","on","dimensionNames","subState","currentlyAssignedNr","requestedDimensionsAssigned","dimensionName","i","currentExtreme","isActive","payload","after","before","masterID","warn","highlightMargin","resetPanAndZoom","hasFocusNow","request","success","failure","CLOUD_BASE_URL_DISABLED","parsedData","dataKey","uncompressed","uncompress","reduce","acc","obj","typeToClassName","left","reset","right","zoomIn","zoomOut","resize","lineChart","areaChart","noChart","loading","noData","Icon","initialSingleState","chartData","chartMetadata","chartPanAndZoom","fetchDataParams","isRemotelyControlled","viewRange","isFetchingData","isFetchDataFailure","isFetchDetailsFailure","isFetchingDetails","snapshotDataIsFetching","snapshotDataIsError","snapshotData","chartReducer","getSubstate","chart","useNewKeysOnlyIfDifferent","pick","shouldForceTimeRange","assoc","omit","getDataAttribute","element","defaultValue","hasAttribute","getAttribute","test","getAttributesStatic","node","mapObjIndexed","attribute","getDataAttributeBoolean","host","httpMethod","chartLibrary","chartDefaults","library","width","legend","legendPosition","unitsCommon","unitsDesired","aggrMethod","labels","postGroupBy","postAggregationMethod","dimensionsAggrMethod","aggrGroups","selectedChart","filteredRows","groupBy","nodeIDs","commonColors","decimalDigits","dimensions","selectedDimensions","forceTimeWindow","appendOptions","gtime","method","overrideOptions","pixelsPerPoint","points","hideResizeHandler","detectResize","dygraphType","dygraphValueRange","dygraphTheme","dygraphSmooth","dygraphColors","dygraphRightGap","dygraphShowRangeSelector","dygraphShowRoller","dygraphTitle","dygraphTitleHeight","dygraphLegend","dygraphLabelsDiv","dygraphLabelsSeparateLine","dygraphIncludeZero","dygraphShowZeroValues","dygraphShowLabelsOnHighLight","dygraphHideOverlayOnMouseOut","dygraphXRangePad","dygraphYRangePad","dygraphYLabelWidth","dygraphStrokeWidth","dygraphStrokePattern","dygraphDrawPoints","dygraphDrawGapEdgePoints","dygraphConnectSeparatedPoints","dygraphPointSize","dygraphStepPlot","dygraphStrokeBorderColor","dygraphStrokeBorderWidth","dygraphFillGraph","dygraphFillAlpha","dygraphStackedGraph","dygraphStackedGraphNanFill","dygraphAxisLabelFontSize","dygraphAxisLineColor","dygraphAxisLineWidth","dygraphDrawGrid","dygraphGridLinePattern","dygraphGridLineWidth","dygraphGridLineColor","dygraphMaxNumberWidth","dygraphSigFigs","dygraphDigitsAfterDecimal","dygraphHighlighCircleSize","dygraphHighlightSeriesOpts","dygraphHighlightSeriesBackgroundAlpha","dygraphXPixelsPerLabel","dygraphXAxisLabelWidth","dygraphDrawXAxis","dygraphYPixelsPerLabel","dygraphYAxisLabelWidth","dygraphDrawYAxis","dygraphDrawAxis","easyPieChartMinValue","easyPieChartMaxValue","easyPieChartBarColor","easyPieChartTrackColor","easyPieChartScaleColor","easyPieChartScaleLength","easyPieChartLineCap","easyPieChartLineWidth","easyPieChartTrackWidth","easyPieChartSize","easyPieChartRotate","easyPieChartAnimate","easyPieChartEasing","gaugeMinValue","gaugeMaxValue","gaugePointerColor","gaugeStrokeColor","gaugeStartColor","gaugeStopColor","gaugeGenerateGradient","sparklineType","sparklineLineColor","sparklineFillColor","sparklineChartRangeMin","sparklineChartRangeMax","sparklineComposite","sparklineEnableTagOptions","sparklineTagOptionPrefix","sparklineTagValuesAttribute","sparklineDisableHiddenCheck","sparklineDefaultPixelsPerValue","sparklineSpotColor","sparklineMinSpotColor","sparklineMaxSpotColor","sparklineSpotRadius","sparklineValueSpots","sparklineHighlightSpotColor","sparklineHighlightLineColor","sparklineLineWidth","sparklineNormalRangeMin","sparklineNormalRangeMax","sparklineDrawNormalOnTop","sparklineXvalues","sparklineChartRangeClip","sparklineChartRangeMinX","sparklineChartRangeMaxX","sparklineDisableInteraction","sparklineDisableTooltips","sparklineOnHover","sparklineDisableHighlight","sparklineHighlightLighten","sparklineHighlightColor","sparklineTooltipContainer","sparklineTooltipClassname","sparklineTooltipFormat","sparklineTooltipPrefix","sparklineTooltipSuffix","sparklineTooltipSkipNull","sparklineTooltipValueLookups","sparklineTooltipFormatFieldlist","sparklineTooltipFormatFieldlistKey","sparklineNumberFormatter","sparklineNumberDigitGroupSep","sparklineNumberDecimalMark","sparklineNumberDigitGroupCount","sparklineAnimatedZooms","d3pieTitle","d3pieSubtitle","d3pieFooter","d3pieTitleColor","d3pieTitleFontsize","d3pieTitleFontweight","d3pieTitleFont","d3PieSubtitleColor","d3PieSubtitleFontsize","d3PieSubtitleFontweight","d3PieSubtitleFont","d3PieFooterColor","d3PieFooterFontsize","d3PieFooterFontweight","d3PieFooterFont","d3PieFooterLocation","d3PiePieinnerradius","d3PiePieouterradius","d3PieSortorder","d3PieSmallsegmentgroupingEnabled","d3PieSmallsegmentgroupingValue","d3PieSmallsegmentgroupingValuetype","d3PieSmallsegmentgroupingLabel","d3PieSmallsegmentgroupingColor","d3PieLabelsOuterFormat","d3PieLabelsOuterHidewhenlessthanpercentage","d3PieLabelsOuterPiedistance","d3PieLabelsInnerFormat","d3PieLabelsInnerHidewhenlessthanpercentage","d3PieLabelsMainLabelColor","d3PieLabelsMainLabelFont","d3PieLabelsMainLabelFontsize","d3PieLabelsMainLabelFontweight","d3PieLabelsPercentageColor","d3PieLabelsPercentageFont","d3PieLabelsPercentageFontsize","d3PieLabelsPercentageFontweight","d3PieLabelsValueColor","d3PieLabelsValueFont","d3PieLabelsValueFontsize","d3PieLabelsValueFontweight","d3PieLabelsLinesEnabled","d3PieLabelsLinesStyle","d3PieLabelsLinesColor","d3PieLabelsTruncationEnabled","d3PieLabelsTruncationTruncatelength","d3PieMiscColorsSegmentstroke","d3PieMiscGradientEnabled","d3PieMiscColorsPercentage","d3PieMiscGradientColor","d3PieCssprefix","peityStrokeWidth","textOnlyDecimalPlaces","textOnlyPrefix","textOnlySuffix","getAttributes","attributesStatic","showValueOf","showValueOfAttribues","Array","from","attributes","merged","isEmpty","getAttributesDynamic","defaultAttributes","localeDateString","localeTimeString","updateLocaleFunctions","newLocaleDateString","newLocaleTimeString","netdataShowAlarms","netdataRegistry","netdataServer","netdataServerStatic","netdataCheckXSS","reduxStore","escapeUserInputHTML","setOption","getFromRegistry","getState","verifyURL","urlOptions","theme","help","mode","update_always","pan_and_zoom","server","highlight","highlight_after","highlight_before","nowelcome","show_alarms","family","hasProperty","property","genHash","forReload","parseHash","variables","len","p","decodeURIComponent","booleans","numeric","parseInt","welcome","Date","now","hashUpdate","history","replaceState","netdataPanAndZoomCallback","status","netdataSnapshotData","netdataHighlightCallback","d1","d2","getElementById","innerHTML","seconds4human","tooltip","clearHighlight","showHighlight","localStorageTested","localStorageTest","Storage","loadLocalStorage","ret","error","saveLocalStorage","getTheme","def","setTheme","netdataTheme","updateTheme","naturalSortChunkify","j","tz","y","n","charAt","charCodeAt","m","naturalSortCompare","a","b","aa","toLowerCase","bb","c","Number","d","saveTextToClient","filename","blob","Blob","url","URL","createObjectURL","link","createElement","setAttribute","el","appendChild","setTimeout","removeChild","revokeObjectURL","click","saveObjectToClient","stringify","netdataURL","indexOf","substring","netdataReload","reload","gotoHostedModalHandler","gotoServerValidateRemaining","gotoServerMiddleClick","gotoServerStop","gotoServerValidateUrl","guid","penalty","finalURL","registryHello","machine_guid","open","modal","gotoServerModalHandler","checked","alternateUrls","count","registrySearch","urls","switchRegistryModalHandler","notifyForSwitchRegistry","newPersonGuid","ajax","serverDefault","async","cache","headers","xhrFields","withCredentials","done","xss","checkAlways","fail","deleteRegistryGuid","deleteRegistryUrl","deleteRegistryModalHandler","notifyForDeleteRegistry","responseEl","registryDelete","result","menus","submenu_names","version","release_channel","hosts","duration","update_every","chartsPerRow","chartsHeight","total","prioritySort","priority","sortObjectByPriority","object","idx","sorted","hasOwnProperty","push","sort","scrollToId","offset","animate","scrollTop","top","customDashboard","menu","submenu","context","netdataDashboard","sparklines_registry","os","sparkline","prefix","dimension","suffix","gaugeChart","anyAttribute","attr","menuTitle","menu_pattern","slice","menuIcon","menuInfo","menuHeight","submenuTitle","submenuInfo","submenuHeight","relative","contextInfo","contextValueRange","valueRange","contextHeight","contextDecimalDigits","enrichChartData","parts","tmp","match","lastIndexOf","headMain","head","generateHeadCharts","hcharts","hi","hlen","renderPage","div","pcent_width","sidebar","mainhead","main","hasChartsOnBottom","chartAdditionalHeight","menuid","icon","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","tag_name","getGCSLatestVersion","response","mediaLink","xhr","textStatus","errorThrown","checkForUpdateByVersion","force","sha2","showPageFooter","display","parseDom","jsonStringifyFn","jsonParseFn","str","eval","xssModalDisableXss","enabled","enabled_for_data","xssModalKeepXss","notifyForUpdate","sha1","save","printPreflight","screen","snapshotOptions","bytes_per_chart","compressionDefault","compressions","bytes_per_point_memory","bytes_per_point_disk","compress","compressed_length","btoa","deflate","to","inflate","atob","LZString","compressToUTF16","decompressFromUTF16","compressToBase64","decompressFromBase64","compressToEncodedURIComponent","decompressFromEncodedURIComponent","loadSnapshotModalLog","tmpSnapshotData","loadSnapshotPreflightFile","file","string","fr","FileReader","onload","date_after","after_ms","date_before","before_ms","charts_ok","charts_failed","compression","data_size","netdata_version","data_points","duration_ms","snapshot_version","comments","removeClass","addClass","readAsText","loadSnapshotPreflightEmpty","loadSnapshot","highlight_after_ms","highlight_before_ms","loadSnapshotDragAndDropInitialized","loadSnapshotDragAndDropSetup","originalEvent","dataTransfer","files","item","loadSnapshotPreflight","saveSnapshotStop","saveSnapshotCancel","stopSnapshotModeAction","saveSnapshotModalInitialized","saveSnapshotModalSetup","saveSnapshotModalInit","find","focus","saveSnapshotModalLog","saveSnapshotModalShowExpectedSize","saveSnapshotViewDuration","saveSnapshotSelectedSecondsPerPoint","sizemb","saveSnapshotCompression","memmb","saveSnapshotSetCompression","saveSnapshotSlider","browser_timezone","start_ms","reduxState","start_date","yyyymmddhhssmm","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","view","destroy","ticks","step","scale","saveSnapshot","eltxt","saveData","update_every_ms","pack_api1_v1_chart_data","chartDataUniqueID","cstr","clearPanAndZoom","startSnapshotModeAction","dataPoints","saveSnapshotRestore","css","size","chartUpdated","chartsCount","selectAmountOfCharts","chartsOk","selectAmountOfSnapshotsFetched","chartsFailed","selectAmountOfSnapshotsFailed","pcent","Intl","DateTimeFormat","resolvedOptions","timeZone","getOption","option","dashboardSettingsSetup","update_options_modal","sync_option","self","bootstrapToggle","units_sync_option","temp_sync_option","timezoneOption","isUsingTimezone","timezone_sync_option","change","selected_server_timezone","CHART_DIV_ID_PREFIX","CHART_DIV_OFFSET","scrollDashboardTo","chartElement","offsetTop","querySelector","modalHiddenCallback","animated","alarmDate","alarmStatus","runOnceOnDashboardLastRun","runOnceOnDashboardWithjQuery","body","scrollspy","scrollPos","modal_depth","modal_shown","netdata_paused_on_modal","scrollspyOffset","scrollY","overflow","position","pauseCallback","pause","unpause","affix","bottom","removeAttr","Ps","initialize","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","fn","shorten","settings","config","showChars","minHideChars","ellipsesText","moreText","lessText","onLess","onscroll","onMore","errMsg","off","$this","hasClass","parent","prev","each","substr","inTag","bag","countChars","openTags","tagName","r","shift","retries_on_data_failures","q","arguments","l","getElementsByTagName","src","parentNode","insertBefore","ga","onresizeCallback","update","resetDashboardOptions","isProperTimezone","userSetServerTimezone","netdataCallback","showSignInModal","explicitlySignIn","explicitlySignInAction","MASKED_DATA","INFO_POLLING_FREQUENCY","alarmStatuses","isTimestamp","NETDATA_REGISTRY_SERVER","MS_IN_SECOND","getIframeSrc","getBoundingClientRect","obj1","obj2","equals","currentScript","isTestingEnv","getDefaultServer","isDevelopmentEnv","RegExp","getPathFromScriptSource","cond","T","pipe","concat","serverStatic","define","_uniqueIDCounter","defaultSettings","header","color","fontSize","fontWeight","font","subtitle","titleSubtitlePadding","canvasHeight","canvasWidth","pieInnerRadius","pieOuterRadius","sortOrder","ignoreSmallSegments","valueType","smallSegmentGrouping","label","outer","format","hideWhenLessThanPercentage","pieDistance","inner","mainLabel","percentage","decimalPlaces","lines","truncation","truncateLength","effects","load","effect","speed","pullOutSegmentOnClick","highlightSegmentOnMouseover","highlightLuminosity","tooltips","placeholderParser","styles","fadeInSpeed","backgroundColor","backgroundOpacity","borderRadius","padding","misc","background","segments","segmentStroke","gradient","canvasPadding","pieCenterOffset","cssPrefix","callbacks","onMouseoverSegment","onMouseoutSegment","onClickSegment","validate","pie","d3","HTMLElement","SVGElement","helpers","isArray","isNaN","addSVGSpace","svg","select","append","shuffleArray","tmpVal","randomIndex","currentIndex","random","processObj","is","getDimensions","w","h","getBBox","rectIntersect","r1","r2","getColorShade","hex","lum","String","newHex","initSegmentColors","finalColors","applySmallSegmentGrouping","totalSize","math","getTotalPieSize","newData","groupedData","totalGroupedData","isGrouped","showPoint","isFunction","functionToCheck","call","prototype","copy","copyIsArray","clone","deep","hasOwn","class2type","jQuery","isWindow","isNumeric","parseFloat","isFinite","isPlainObject","nodeType","constructor","toRadians","degrees","PI","toDegrees","radians","computePieRadius","textComponents","headerHeight","exists","innerRadius","percent","outerRadius","smallestDimension","pieDistanceSpace","sortPieData","getPieTranslateCenter","pieCenter","calculatePieCenter","hasTopTitle","hasTopSubtitle","headerOffset","footerOffset","rotate","xm","ym","cos","sin","translate","rads","pointIsInArc","pt","ptData","d3Arc","theta1","startAngle","theta2","endAngle","dist","angle","atan2","add","section","sectionDisplayType","include","getIncludes","outerLabel","insert","labelGroup","__labels","selectAll","enter","formatterContext","part","positionLabelElements","dims","computeLabelLinePositions","lineCoordGroups","computeLinePosition","x2","y2","x3","y3","getSegmentAngle","midpoint","originCoords","heightOffset","outerLabelGroupData","quarter","startOfLabelX","startOfLabel","addLabelLines","lineGroup","lineFunction","line","curve","curveBasis","positionLabelGroups","pieCenterCopy","newCoords","xOffset","yOffset","val","addMainLabel","addValue","addPercentage","computeOuterLabelCoords","getIdealOuterLabelPositions","resolveOuterLabelCollisions","checkConflict","currIndex","direction","curr","currIndexHemisphere","hs","nextIndex","currLabelGroup","examinedLabelGroup","labelHeights","center","lineLength","heightChange","isLabelHidden","adjustLabelPos","lastCorrectlyPositionedLabel","xDiff","yDiff","newXPos","newYPos","sqrt","labelGroupNode","labelGroupDims","originalX","originalY","hemisphere","effectMap","easeLinear","easeBounce","easeSin","easeElastic","easeBack","easeQuad","easeCircle","easeExp","create","pieChartElement","arc","addGradients","grads","addSegmentEventHandlers","merge","segment","currentEl","isExpanded","onSegmentEvent","closeSegment","openSegment","segColor","tt","showTooltip","moveTooltip","hideTooltip","func","expanded","isOpeningSegment","maybeCloseOpenSegment","transition","ease","centroid","pullOutSize","currentlyOpenSegment","getCentroid","bbox","opts","fullValue","compounded","currValue","offscreenCoord","addTitle","__title","positionTitle","headerLocation","addSubtitle","__subtitle","positionSubtitle","getHeaderHeight","addFooter","__footer","positionFooter","footerLocation","footerWidth","totalTitleHeight","footerPlusPadding","addTooltips","caption","replacePlaceholders","currentTooltip","mouseCoords","mouse","replacements","placeholder","d3pie","_setupData","_init","recreate","redraw","getOpenSegment","updateProp","propKey","oldVal","oldValue","dp","_getPercentage","totalPercentage","toFixed","relativeAmount","selectChartsState","selectSingleChartState","chartsState","selectChartData","chartState","selectChartMetadataFromExplicitCall","selectChartMetadata","metadataFromAll","metadataFromSingleCall","selectIsFetchingDetails","makeSelectChartMetadataRequest","selectChartViewRange","selectChartIsFetchingData","selectChartFetchDataParams","selectResizeHeight","selectChartPanAndZoom","selectAmountOfFetchedCharts","hasCompletedFetching","selectNameOfAnyFetchingChart","showSignInModalAction","isSignedInAction","setOfflineAction","fallbackUpdateTimeInterval","panAndZoomDelay","totalSeconds","defaultOptions","day","hour","minute","second","and","strings","pop","join","module","exports","require","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_","column","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","documentElement","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","__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_","navigator","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","isSnapshotMode","snapshotCharts","snapshotDataPoints","isSignedIn","offline","dashboardReducer","combineReducers","globalKey","chartKey","dashboardKey","axiosInstance","axios","Pragma","getFetchStream","concurrentCallsLimit","fetch$","Subject","resetFetch$","handler","mergeMap","params","onErrorCallback","onSuccessCallback","cancelTokenSource","timeout","cancelToken","token","tap","responseData","catchError","message","empty","startWith","switchMap","subscribe","fillMissingData","nrOfPointsToFill","viewUpdateEvery","view_update_every","firstAddedTimestamp","emptyPoint","tail","nulls","addPointsDygraph","emptyArray","transformResults","shouldRevertFlip","dataResult","pointData","sum","Container","styled","getSizeBy","SideContent","ContentContainer","HeaderText","Text","getColor","ContentText","TextSmall","UINotification","props","leftContent","rightContent","renderContent","createUINotification","NodeIconContainer","NotificationLink","toastOptions","toast","POSITION","BOTTOM_RIGHT","autoClose","pauseOnFocusLoss","showCloudInstallationProblemNotification","notificationComponent","showCloudConnectionProblemNotification","uiNotification","href","defaultUrlOptions","alarm_unique_id","alarm_id","alarm_event_id","alarm_when","parseQueryPair","isInvalidPair","mapIndexed","parseUrl","watchFetchDataResponseChannel","fetchDataSaga","fetchChartSaga","fetchInfoSaga","chartSagas","CONCURRENT_CALLS_LIMIT_METRICS","fetchDataResponseChannel","channel","take","action","start","end","put","constructCompatibleKey","IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS","getGroupByValues","fetchMetrics$","group","dimensionsWithUrlOptions","matchingKey","snapshotKey","agentOptionsOriginal","hasFlip","agentOptions","shouldAddFakeFlip","groupValues","axiosOptions","agent_options","post_aggregation_methods","aggregations","valueOf","fillMissingPoints","transformedResults","postAggregated","post_aggregated_data","fetchForSnapshot$","resetFetchForSnapshot$","fetchDataForSnapshotSaga","aggr_method","node_ids","stopSnapshotModeSaga","poll","wasCloudAvailable","wasACLKAvailable","takeEvery","spawn","sidePanelTransitionTimeInSeconds","getLog","notifyAll","alarmsLoop","startAlarms","fetchAllAlarmsSaga","alarmsSagas","ALARMS_INITIALIZATION_DELAY","ALARMS_UPDATE_EVERY","ALARMS_MS_BETWEEN_NOTIFICATIONS","areNotificationsAvailable","notificationCallback","netdataAlarmsNotifCallback","firstNotificationId","lastNotificationId","scrollToAlarm","chartID","scrollToChart","requestPermissions","Notification","permission","requestPermission","hasGivenNotificationPermissions","lastNotificationIdArg","getNotification","entry","firstNotificationIdArg","updated","valueString","value_string","tag","interaction","unique_id","old_status","no_clear_notification","notificationTitle","notificationOptions","requireInteraction","notificationHandler","alarmLogs","logsSorted","sortBy","newLogs","notifications","onclick","netdataAlarmsRemember","what","latest_alarm_log_unique_id","allAlarms","allowedReferrerDomains","isAllowedReferrer","referrer","watchWindowFocusChannel","waitForFullInfoPayload","injectPosthog","fetchHelloSaga","spacePanelSaga","globalSagas","windowFocusChannel","listenToWindowFocus","posthog","__SV","_i","api_host","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","setOptonSaga","fragmentParamsSeparatorRegEx","getHashParams","param","makeHashFromObject","entries","setHashParams","allParams","allParamsResult","mergeDeepLeft","removeHashParams","excludedParams","filteredParams","getFilteredHash","showSignInSaga","mainJsSagas","LOCAL_STORAGE_NEEDS_SYNC","setGlobalChartUnderlaySaga","hashParams","clearHighlightSaga","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","setConvertUnits","setMin","setMax","unitsCurrent","setUnitsCurrent","decimals","setDecimals","setIntlNumberFormat","legendFormatValue","useMemo","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","useDateTime","scrollbarRef","legendPluginModuleString","legendResolutionTooltip","dimensionId","rgb","hexFull","colorHex2Rgb","isSelected","hoveredValueArray","view_latest_values","role","tabIndex","ChartTimeframe","ChartLegendBottom","legendToolbox","resizeHandler","ChartLegend","setSelectedDimensions","clickedDimensionName","isModifierKeyPressed","newSelectedDimensions","getNewSelectedDimensions","allDimensions","LegendToolbox","onToolboxLeftClick","onToolboxResetClick","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","ProceededChartDisclaimer","forwardRef","data-testid","rel","backgroundColorMap","WARNING","CRITICAL","CLEAR","borderColorMap","getBorderColor","textColorMap","Badge","border","getInitialDygraphOptions","hiddenLabelsElementId","orderedColors","setMinMax","shouldSmoothPlot","xAxisDateString","xAxisTimeString","isSparkline","grid","includeZero","ylabel","smoothPlotter","strokePattern","drawGapEdgePoints","gridLinePattern","logscale","Dygraph","toTimeString","DygraphChart","chartElementClassName","chartElementId","onUpdateChartPanAndZoom","immediatelyDispatchPanAndZoom","setGlobalChartUnderlay","setHoveredX","viewAfter","selectedAlarm","updateChartPanOrZoom","shouldNotExceedAvailableRange","dygraphInstance","latestIsUserAction","isMouseDown","dygraphHighlightAfter","dygraphLastTouchMove","dygraphLastTouchPageX","dygraphLastTouchEnd","isSyncPanAndZoom","resetGlobalPanAndZoom","isRendered","toggleIsRendered","useDygraphBadge","isBadgeVisible","alarmBadgeRef","updateAlarmBadge","isProceeded","precededChartRef","updatePrecededPosition","useLayoutEffect","dygraphOptionsStatic","dygraphOptions","newHoveredX","xRange","last_entry","isInRangeOfAvailableData","minDate","maxDate","currentAlarm","alarmPosition","fillColor","globalAlphaCache","globalAlpha","bottomLeft","topRight","isOutsideReasonableViewport","metaKey","sortedRange","wheel","adjustAxis","zoomInPercentage","bias","increment","foo","normalDef","wheelDelta","deltaY","detail","percentages","yar0","offsetToPercentage","xPct","yPct","xBias","yBias","yAxes","newYAxes","zoomRange","updatedAfter","updatedBefore","dygraphPlotter","pct","double_click_speed","instance","useUpdateEffect","forceDateWindow","hasChangedDuration","hasScrolledToTheFutureDuringPlayMode","optionsDateWindow","commonMinState","commonMaxState","shouldUseCommonMin","shouldUseCommonMax","shouldUpdate","newExtremes","useUnmount","resizeObserver","useMount","hasOmitedFirstCallback","callbackDebounced","waitFor","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","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","getRows","getColumns","rows","getXPosition","getYPosition","getWidth","onMouseenter","onMouseout","activeBox","deactivateBox","activateBox","clearEvents","getCanvasAttributes","scaleLinear","domain","extent","range","drawBox","cellSize","hoveredIndex","getEvent","mouseout","nextHoveredIndex","registerEvents","strokeRect","cellBoxSize","innerHeight","aligns","GroupBox","renderTooltip","dataRef","canvasRef","boxesRef","hover","setHover","dropHoverRef","boxHoverRef","timeoutId","close","closeDrop","currentHover","drawBoxes","onMouseEnter","onMouseLeave","getAlign","Title","Label","Flex","attrs","as","TextMicro","gap","GroupBoxWrapper","groupIndex","renderGroupPopover","renderBoxPopover","maxWidth","boxPopover","boxAlign","groupPopover","alignItems","margin","plain","isOpen","popoverRef","strong","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","flavour","neutral","themeType","disabled","Tabs","ExpandButton","makeFlex","Section","onExpand","noBorder","side","justifyContent","oldDefaultHeights","getPortalNodeStyles","shouldAddSpecialHeight","heightFromLocalStorage","heightID","persitedHeight","persistedHeightOld","getHeightFromLocalStorage","heightOverriden","chartDefaultsMinWidth","min_width","minWidth","globalIntersectionOptions","root","rootMargin","threshold","globalIntersectionObserver","globalObserver","IntersectionObserver","isIntersecting","unsubscribe","elementToUnsubscribe","createGlobalIntersectionObserver","InvisibleSearchableText","opacity","shouldCleanChartStateAlways","DisableOutOfView","portalNode","hasPortalNodeBeenStyled","setHasPortalNodeBeenStyled","isShowingAlarmOnChart","forEachObjIndexed","styleName","setProperty","destroyOnHide","clonedChildrenRef","isVisibleIntersection","setIsVisible","isVisibleRef","newIsVisible","useCommonIntersection","debounceTime","shouldHideDebounced","setShouldHideDebounced","useDebounce","shouldHide","previousIsVisibleIntersection","newClonedChildren","child","cloned","clonedCanvases","querySelectorAll","oldCanvas","newCanvas","drawImage","cloneWithCanvas","clonedChildrenContainer","nodeElement","ChartContainer","dropdownMenu","renderCustomElementForDygraph","onAttributesChange","externalChartMetadata","sectionTitle","aggrMethods","avg","ChartValueContainer","memo","displayedIndex","aggregation","getAggregation","ChartValue","dangerouslySetInnerHTML","__html","groupLabel","postGroupLabel","relatedIndex","useContext","ThemeContext","chartContainerRef","setDisplayedIndex","setDisplayedIndexThrottled","throttle","repaint","relatedCharts","relatedChartAttributes","chartAttributes","chartLabels","ExternalButton","alignSelf","Item","secondary","DateItem","date","DateSection","Metrics","LabelsSection","labelId","items","onItemClick","getLabel","sliced","expandable","onNodeClick","ids","predefinedLabelIds","getLabelIds","StyledButton","List","onBack","horizontal","TabsContainer","Popover","setView","isLabelView","Kubernetes","labelValues","postGroupValues","postGroupData","groupValue","indexes","boxes","labelsAcc","groupData","groupChartLabels","groupLabels","Set","accChartLabels","transform","groupBoxData","groupedBoxesData","groupedBox","AbstractChart","showValueAttributesNodes","userElementId","chartSettingCallOptions","isFlipped","dimensionIndex","useShowValueOutside","Chart","viewRangeForCurrentData","themeContext","unitsScalingMethod","shouldDisplayToolbox","legend_toolbox","shouldDisplayResizeHandler","resize_charts","allDimensionNames","dimensionNamesFromMetadata","additionalDimensionNamesFromData","localHoveredX","setLocalHoveredX","isSyncSelection","handleSetHoveredX","noMaster","globalHoveredX","netdataFirst","netdataLast","fixedMinDuration","setGlobalPanAndZoomDebounced","useDebouncedCallback","newGlobalPanAndZoom","flush","handleUpdateChartPanAndZoom","shouldFlushImmediately","minDuration","currentDuraton","afterForced","beforeForced","first","wantedDuration","doCallback","tolerance","movement","handleToolBoxPanAndZoom","newAfter","newBefore","handleToolboxLeftClick","handleToolboxRightClick","timeWindow","handleToolboxZoomInClick","panAndZoomStep","handleToolboxZoomOutClick","handleToolboxResetClick","selectAssignedColors","__","isTimeVisible","grayLimedSpruce","DropdownItem","DropdownItemLabel","DotsBtn","ChartDropdown","setIsOpen","handleClose","onClose","circleAnimation","keyframes","SpinnerContainer","Circle","Circle2","Circle3","ChartSpinner","spaceBetween","ChartDropdownContainer","dimensionsAggrMethodMap","ChartWithLoader","selectChartMetadataRequest","actualChartMetadata","panAndZoom","isPanAndZoomMaster","areCriteriaMet","preferedIntervalTime","stopUpdatesWhenFocusIsLost","shouldBeUpdating","shouldFetch","setShouldFetch","shouldFetchImmediatelyAfterFocus","setShouldFetchImmediatelyAfterFocus","intervalTime","useInterval","useFetchNewDataClock","panAndZoomThrottled","useThrottle","initialBefore","liveModeAfter","boundingClientRect","isShowingSnapshot","shouldUsePanAndZoomPadding","CancelToken","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","truncate","Options","data-toggle","data-target","VersionControl","currentVersion","isStableReleaseChannel","releaseChannel","githubVersion","gcsVersionResponse","mediaLinkResponse","latestVersion","transformGcsVersionResponse","isNewVersionAvailable","small","versionSelector","Version","RootContainer","DropdownContainer","Menu","ListContainer","OpenerIcon","noMargin","themeOptions","white","DefaultTheme","mainBackground","surface","primary","accent","onPrimary","bright","onSecondary","onSurface","onError","dupaDupa","textPrimaryOnBackground","textSecondaryOnBackground","textFocus","textHintOnBackground","textDisabledOnBackground","textIconOnBackground","textPrimaryOnLight","DarkTheme","textSecondaryOnLight","textHintOnLight","textDisabledOnLight","textIconOnLight","textPrimaryOnDark","textSecondaryOnDark","textHintOnDark","textDisabledOnDark","textIconOnDark","slate","RMWCThemeProvider","StyledSidebar","PortalSidebar","Wrapper","PickerBox","HeaderSvg","IconSpacer","PickerActionArea","PickerBtnArea","ShortPickHeader","ShortPick","ShortPickElement","AccessorBox","DropdownBox","StyledDropdown","renderTitle","onMenuToggle","anchorCorner","renderOpener","TypeViewBox","DropdownIcon","TextBox","LastText","CustomInput","input","symbol","AlarmClock","xlinkHref","Clock","PRESET_RANGES","ShortPickArea","handleDatesChange","selectedStart","tagging","timeCorrection","startDate","endDate","guessResolutionAndValue","resolution","DAY","HOUR","MINUTE","Arrow","ArrowSvg","Calendar","CalendarSvg","PickerAccessorElement","getShortHandTimeAlias","startAlias","moment","endAlias","dateResolutions","pluralize","getNewStart","CustomShortPicker","setRangeValues","isDropdownOpen","toggleDropdown","handleStartChange","newStart","newTimeCorrection","currentTarget","dateResolution","newResolution","pickerFormat","disabledDates","diff","MonthLeft","MonthLeftSvg","MonthRight","MonthRightSvg","handleChangeDateByManualInput","dateToBeSet","setterFn","creationData","convertToMoment","focusTaggingMap","Picker","handleOpenState","pickedValues","startDateState","setStartDate","endDateState","setEndDate","startDateMoment","endDateMoment","focusedInput","setFocusedInput","escapeListener","clickListener","contains","useCloseOnOutsideClick","focusTagging","pickerModal","closeOnEsc","closeOnOverlayClick","onDatesChange","daySize","onFocusChange","fi","hideKeyboardShortcutsPanel","enableOutsideDays","isOutsideRange","firstDayOfWeek","verticalSpacing","displayFormat","startDateId","openDirection","endDateId","navNext","navPrev","ReduxWrappedPicker","setOpenState","isGlobalPanAndZoom","isPanAndZoom","DateTimePicker","hollowColors","StyledPill","hollow","Pill","pillProps","Alarms","Anchor","publishedAt","last_publication_date","description","image","imageSrc","dateFormated","webkitVisibleScrollbar","News","onCloseClick","toggle","backdrop","onClickOutside","onEsc","client","Prismic","AgentNews","useLocalStorage","setValue","news","setNews","onSuccess","query","Predicates","orderings","fetchNews","results","upToDate","latestEntry","isRegistrySelector","offlineSelector","dashboard","SignIn","signInUrl","isRegistry","redirectURI","onSignIn","sendToChildIframe","htmlIframeElement","contentWindow","postMessage","useListenToPostMessage","messageType","defaultState","lastMessage","setLastMessage","handleMessage","resetMesssage","IframeContainer","Iframe","signedIn","rendered","setRendered","signInMsg","lsValue","removeLsValue","nameParam","originParam","signInIframeUrl","onLoad","useCheckSignInStatus","setHasSignedInBefore","onMessage","isNew","Fragment","PanelRowContainer","selected","MenuItem","testid","actions","basis","DefaultListHeader","H4","SectionHandle","toggleOpen","ItemsList","bacgkround","SignOut","SignInItem","isSignedInSelector","UserSettings","menuItems","separator","SpacesSkeleton","SpacesIframe","NetdataLogo","viewBox","xmlns","Spaces","cloudEnabled","app","getNodeUrl","baseUrl","getNodes","hostsStatus","base","decodeURI","getBaseUrl","replicatedNodes","Search","TextInput","StyledIcon","ReplicatedNodes","listOpen","setListOpen","toggleListOpen","iconLeft","metaShrinked","SpacePanelIframe","spacePanelMessage","promptContent","signIn","signUp","SignInPrompt","NoNetwork","fillRule","clipRule","OfflinePrompt","replicatedNodesSelector","visitedNodesSelector","visitedNodes","globalRegistry","switchIdentity","persist","pointerEvents","setLsValue","Layout","printMode","mapTheme","App","useStore","refreshHelper","setRefreshHelper","haveDOMReadyForParsing","loadOverlay","shouldUseRegistry","useRegistry","shouldUseAlarms","useAlarms","shouldUseInfo","useInfo","hasFetchDependencies","setHasFetchDependencies","bootstrap_css","dashboard_css","useChartsMetadata","alarmWhen","alarmTime","alarmChart","alarmValue","useAlarmFromUrl","ReactDOM","withContext","collected","viewed","enabledDimensions","isCurrentlySelected","isSupportingDateTimeFormat","language","narrowToDate","localeDateStringNative","localeTimeStringNative","xAxisTimeStringNative","localeMatcher","formatMatcher","weekday","year","month","dateOptions","timeOptions","hour12","timeZoneName","xAxisOptions","process","useSelectorOriginal","useDispatchOriginal","assign","meta"],"mappings":"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","file":"static/js/main.8aa70c75.chunk.js","sourcesContent":["import { createAction } from \"redux-act\"\n\nimport { createRequestAction } from \"utils/createRequestAction\"\nimport { RegistryMachine } from \"domains/global/sagas\"\nimport { storeKey } from \"./constants\"\nimport { ActiveAlarms, ChartsMetadata, Snapshot, Alarm } from \"./types\"\n\ninterface RequestCommonColors {\n chartContext: string\n chartUuid: string\n colorsAttribute: string | undefined\n commonColorsAttribute: string | undefined\n dimensionNames: string[]\n}\nexport const requestCommonColorsAction = createAction<RequestCommonColors>(\n `${storeKey}/globalRequestCommonColors`,\n)\n\ninterface SetCommonMinAction { chartUuid: string, commonMinKey: string, value: number }\nexport const setCommonMinAction = createAction<SetCommonMinAction>(`${storeKey}/setCommonMin`)\n\ninterface SetCommonMaxAction { chartUuid: string, commonMaxKey: string, value: number }\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\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 { activeAlarms: ActiveAlarms }\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","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}\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}\n\nconst localStorageKeyToOption = <T extends string>(key: T) => key.replace(/^options\\./, \"\")\n .replace(themeLocalStorageKey, THEME)\n\nconst getItemFromLocalStorage = <T extends string>(key: T) => {\n const value = localStorage.getItem(key)\n // \"undefined\" (deliberate as a string) to support \"options.setOptionCallback\", an old property\n // used in old dashboard. users will still have it, so we need to support it for some time\n if (value === null || value === \"undefined\") {\n localStorage.removeItem(key)\n return null\n }\n let parsed\n try {\n parsed = JSON.parse(value)\n } catch (e) {\n // todo fix after main.js refactor\n // special case for netdataTheme, only this option is not boolean\n if (key === themeLocalStorageKey && value) {\n return value\n }\n\n console.log(`localStorage: failed to read \"${key}\", using default`) // eslint-disable-line no-console, max-len\n // it was not present in old dashboard, but it probably makes sense to remove broken values\n localStorage.removeItem(key)\n return null\n }\n return parsed\n}\n\nexport const getOptionsMergedWithLocalStorage = (): Options => {\n const optionsFromLocalStorage = Object.keys(localStorage)\n .filter((key) => key.startsWith(\"options.\") || key === themeLocalStorageKey)\n .map((key) => ({\n [localStorageKeyToOption(key)]: getItemFromLocalStorage(key),\n }))\n .filter((o) => Object.values(o)[0] !== null)\n\n const overridenOptions = mergeAll(optionsFromLocalStorage) as unknown as Options\n return mergeRight(INITIAL_OPTIONS, overridenOptions)\n}\n\nexport const optionsMergedWithLocalStorage = getOptionsMergedWithLocalStorage()\nexport const initialLegendRight = optionsMergedWithLocalStorage[LEGEND_RIGHT]\n\nexport const clearLocalStorage = () => {\n const localStorageKeys = Object.keys(localStorage)\n localStorageKeys.forEach((key) => {\n if (key.startsWith(LOCALSTORAGE_HEIGHT_KEY_PREFIX) || key.startsWith(\"options.\")) {\n localStorage.removeItem(key)\n }\n })\n}\n","const isPrintMode = window.location.hash.split(\";\").includes(\"help=true\")\n\nconst getIsDemo = () => {\n if (isPrintMode) {\n return false\n }\n const { hostname } = document.location\n return (\n hostname.endsWith(\".my-netdata.io\")\n || hostname.endsWith(\".mynetdata.io\")\n || hostname.endsWith(\".netdata.rocks\")\n || hostname.endsWith(\".netdata.ai\")\n || hostname.endsWith(\".netdata.live\")\n || hostname.endsWith(\".firehol.org\")\n || hostname.endsWith(\".netdata.online\")\n || hostname.endsWith(\".netdata.cloud\")\n )\n}\n\nexport const isDemo = getIsDemo()\n","export const zeropad = (x: number) => {\n if (x > -10 && x < 10) {\n return `0${x.toString()}`\n }\n return x.toString()\n}\n\ninterface ScalableUnits {\n [unitGroupName: string]: {\n [unitName: string]: number\n }\n}\n\nconst scalableUnits: ScalableUnits = {\n \"packets/s\": {\n pps: 1,\n Kpps: 1000,\n Mpps: 1000000,\n },\n pps: {\n pps: 1,\n Kpps: 1000,\n Mpps: 1000000,\n },\n \"kilobits/s\": {\n \"bits/s\": 1 / 1000,\n \"kilobits/s\": 1,\n \"megabits/s\": 1000,\n \"gigabits/s\": 1000000,\n \"terabits/s\": 1000000000,\n },\n \"bytes/s\": {\n \"bytes/s\": 1,\n \"kilobytes/s\": 1024,\n \"megabytes/s\": 1024 * 1024,\n \"gigabytes/s\": 1024 * 1024 * 1024,\n \"terabytes/s\": 1024 * 1024 * 1024 * 1024,\n },\n \"kilobytes/s\": {\n \"bytes/s\": 1 / 1024,\n \"kilobytes/s\": 1,\n \"megabytes/s\": 1024,\n \"gigabytes/s\": 1024 * 1024,\n \"terabytes/s\": 1024 * 1024 * 1024,\n },\n \"B/s\": {\n \"B/s\": 1,\n \"KiB/s\": 1024,\n \"MiB/s\": 1024 * 1024,\n \"GiB/s\": 1024 * 1024 * 1024,\n \"TiB/s\": 1024 * 1024 * 1024 * 1024,\n },\n \"KB/s\": {\n \"B/s\": 1 / 1024,\n \"KB/s\": 1,\n \"MB/s\": 1024,\n \"GB/s\": 1024 * 1024,\n \"TB/s\": 1024 * 1024 * 1024,\n },\n \"KiB/s\": {\n \"B/s\": 1 / 1024,\n \"KiB/s\": 1,\n \"MiB/s\": 1024,\n \"GiB/s\": 1024 * 1024,\n \"TiB/s\": 1024 * 1024 * 1024,\n },\n bytes: {\n bytes: 1,\n kilobytes: 1024,\n megabytes: 1024 * 1024,\n gigabytes: 1024 * 1024 * 1024,\n terabytes: 1024 * 1024 * 1024 * 1024,\n },\n Hz: {\n Hz: 1,\n kHz: 10 ** 3,\n MHz: 10 ** 6,\n GHz: 10 ** 9,\n THz: 10 ** 12,\n PHz: 10 ** 15,\n EHz: 10 ** 18,\n ZHz: 10 ** 21,\n },\n B: {\n B: 1,\n KiB: 1024,\n MiB: 1024 * 1024,\n GiB: 1024 * 1024 * 1024,\n TiB: 1024 * 1024 * 1024 * 1024,\n PiB: 1024 * 1024 * 1024 * 1024 * 1024,\n },\n KB: {\n B: 1 / 1024,\n KB: 1,\n MB: 1024,\n GB: 1024 * 1024,\n TB: 1024 * 1024 * 1024,\n },\n KiB: {\n B: 1 / 1024,\n KiB: 1,\n MiB: 1024,\n GiB: 1024 * 1024,\n TiB: 1024 * 1024 * 1024,\n },\n MB: {\n B: 1 / (1024 * 1024),\n KB: 1 / 1024,\n MB: 1,\n GB: 1024,\n TB: 1024 * 1024,\n PB: 1024 * 1024 * 1024,\n },\n MiB: {\n B: 1 / (1024 * 1024),\n KiB: 1 / 1024,\n MiB: 1,\n GiB: 1024,\n TiB: 1024 * 1024,\n PiB: 1024 * 1024 * 1024,\n },\n GB: {\n B: 1 / (1024 * 1024 * 1024),\n KB: 1 / (1024 * 1024),\n MB: 1 / 1024,\n GB: 1,\n TB: 1024,\n PB: 1024 * 1024,\n EB: 1024 * 1024 * 1024,\n },\n GiB: {\n B: 1 / (1024 * 1024 * 1024),\n KiB: 1 / (1024 * 1024),\n MiB: 1 / 1024,\n GiB: 1,\n TiB: 1024,\n PiB: 1024 * 1024,\n EiB: 1024 * 1024 * 1024,\n },\n /*\n 'milliseconds': {\n 'seconds': 1000\n },\n 'seconds': {\n 'milliseconds': 0.001,\n 'seconds': 1,\n 'minutes': 60,\n 'hours': 3600,\n 'days': 86400\n }\n */\n}\n\nlet currentTemperatureSetting: \"celsius\" | \"fahrenheit\"\nlet currentSecondsAsTimeSetting: boolean\ninterface ConvertibleUnits {\n [unitIn: string]: {\n [unitOut: string]: {\n check: ((number: number) => boolean) | (() => boolean)\n convert: (number: number) => number | string\n }\n }\n}\nconst convertibleUnits: ConvertibleUnits = {\n Celsius: {\n Fahrenheit: {\n // check(max) {\n check() {\n return currentTemperatureSetting === \"fahrenheit\"\n },\n convert(value: number) {\n return (value * 9) / 5 + 32\n },\n },\n },\n celsius: {\n fahrenheit: {\n // check(max) {\n check() {\n return currentTemperatureSetting === \"fahrenheit\"\n },\n convert(value: number) {\n return (value * 9) / 5 + 32\n },\n },\n },\n seconds: {\n time: {\n // check(max) {\n check() {\n return currentSecondsAsTimeSetting\n },\n convert(seconds: number) {\n // eslint-disable-next-line no-use-before-define\n return unitsConversionCreator.seconds2time(seconds)\n },\n },\n },\n milliseconds: {\n milliseconds: {\n check(max: number) {\n return currentSecondsAsTimeSetting && max < 1000\n },\n convert(milliseconds: number) {\n let tms = Math.round(milliseconds * 10)\n const millisecondsRet = Math.floor(tms / 10)\n\n tms -= millisecondsRet * 10\n\n return `${(millisecondsRet).toString()}.${tms.toString()}`\n },\n },\n seconds: {\n check(max: number) {\n return currentSecondsAsTimeSetting && max >= 1000 && max < 60000\n },\n convert(milliseconds: number) {\n let millisecondsReturn = Math.round(milliseconds)\n\n const seconds = Math.floor(millisecondsReturn / 1000)\n millisecondsReturn -= seconds * 1000\n\n millisecondsReturn = Math.round(millisecondsReturn / 10)\n\n return `${seconds.toString()}.${\n zeropad(millisecondsReturn)}`\n },\n },\n \"M:SS.ms\": {\n check(max) {\n return currentSecondsAsTimeSetting && max >= 60000\n },\n convert(milliseconds: number) {\n let millisecondsReturn = Math.round(milliseconds)\n\n const minutes = Math.floor(millisecondsReturn / 60000)\n millisecondsReturn -= minutes * 60000\n\n const seconds = Math.floor(millisecondsReturn / 1000)\n millisecondsReturn -= seconds * 1000\n\n millisecondsReturn = Math.round(millisecondsReturn / 10)\n\n return `${minutes.toString()}:${\n zeropad(seconds)}.${\n zeropad(millisecondsReturn)}`\n },\n },\n },\n}\n\nconst identity = (value: number) => value\n\ninterface Keys {\n [commonUnitsKey: string]: {\n [uuid: string]: {\n divider: number\n units: string\n }\n }\n}\ninterface Latest {\n [commonUnitsKey: string]: {\n divider: number\n units: string\n }\n}\nexport const unitsConversionCreator = {\n // todo lift the state\n keys: {} as Keys, // keys for data-common-units\n latest: {} as Latest, // latest selected units for data-common-units\n\n globalReset() {\n this.keys = {}\n this.latest = {}\n },\n\n seconds2time(seconds: number) {\n let secondsReturn = Math.abs(seconds)\n\n const days = Math.floor(secondsReturn / 86400)\n secondsReturn -= days * 86400\n\n const hours = Math.floor(secondsReturn / 3600)\n secondsReturn -= hours * 3600\n\n const minutes = Math.floor(secondsReturn / 60)\n secondsReturn -= minutes * 60\n\n secondsReturn = Math.round(secondsReturn)\n\n const msTxt = \"\"\n\n return `${((days > 0) ? `${days.toString()}d:` : \"\").toString()\n + zeropad(hours)}:${\n zeropad(minutes)}:${\n zeropad(secondsReturn)\n }${msTxt}`\n },\n\n // get a function that converts the units\n // + every time units are switched call the callback\n get(\n uuid: string, min: number, max: number, units: string | undefined,\n desiredUnits: undefined | null | string, commonUnitsName: string | null | undefined,\n switchUnitsCallback: (units: string) => void, temperatureSetting: \"celsius\" | \"fahrenheit\",\n secondsAsTimeSetting: boolean,\n ) {\n // validate the parameters\n if (typeof units === \"undefined\") {\n // eslint-disable-next-line no-param-reassign\n units = \"undefined\"\n }\n\n // it will be removed when we'll lift the state to redux\n currentTemperatureSetting = temperatureSetting\n currentSecondsAsTimeSetting = secondsAsTimeSetting\n\n // check if we support units conversion\n if (typeof scalableUnits[units] === \"undefined\"\n && typeof convertibleUnits[units] === \"undefined\"\n ) {\n // we can't convert these units\n // console.log('DEBUG: ' + uuid.toString() + ' can\\'t convert units: ' + units.toString());\n return (value: number) => value\n }\n\n // check if the caller wants the original units\n if (desiredUnits === undefined || desiredUnits === null || desiredUnits === \"original\"\n || desiredUnits === units\n ) {\n // console.log('DEBUG: ' + uuid.toString() + ' original units wanted');\n switchUnitsCallback(units)\n return identity\n }\n\n // now we know we can convert the units\n // and the caller wants some kind of conversion\n\n let tunits = null\n let tdivider = 0\n\n if (typeof scalableUnits[units] !== \"undefined\") {\n // units that can be scaled\n // we decide a divider\n\n if (desiredUnits === \"auto\") {\n // the caller wants to auto-scale the units\n\n // find the absolute maximum value that is rendered on the chart\n // based on this we decide the scale\n /* eslint-disable no-param-reassign */\n min = Math.abs(min)\n max = Math.abs(max)\n if (min > max) {\n max = min\n }\n /* eslint-enable no-param-reassign */\n\n const scalableUnitsGroup = scalableUnits[units]\n Object.keys(scalableUnitsGroup).forEach((unit) => {\n const unitDivider = scalableUnitsGroup[unit]\n if (unitDivider <= max && unitDivider > tdivider) {\n tunits = unit\n tdivider = unitDivider\n }\n })\n\n if (tunits === null || tdivider <= 0) {\n // we couldn't find auto-scaling candidate for unit\n switchUnitsCallback(units)\n return identity\n }\n\n if (typeof commonUnitsName === \"string\") {\n // the caller wants several charts to have the same units\n // data-common-units\n\n const commonUnitsKey = `${commonUnitsName}-${units}`\n\n // add our divider into the list of keys\n let t = this.keys[commonUnitsKey]\n if (typeof t === \"undefined\") {\n this.keys[commonUnitsKey] = {}\n t = this.keys[commonUnitsKey]\n }\n t[uuid] = {\n units: tunits,\n divider: tdivider,\n }\n\n // find the max divider of all charts\n let commonUnits = t[uuid]\n // todo remove imperative forEach\n Object.keys(t).forEach((x) => {\n if (t[x].divider > commonUnits.divider) {\n commonUnits = t[x]\n }\n })\n\n // save our common_max to the latest keys\n const latest = {\n units: commonUnits.units,\n divider: commonUnits.divider,\n }\n this.latest[commonUnitsKey] = latest\n\n tunits = latest.units\n tdivider = latest.divider\n\n // apply it to this chart\n switchUnitsCallback(tunits)\n return (value: number) => {\n if (tdivider !== latest.divider) {\n // another chart switched our common units\n // we should switch them too\n tunits = latest.units\n tdivider = latest.divider\n switchUnitsCallback(tunits)\n }\n\n return value / tdivider\n }\n }\n // the caller did not give data-common-units\n // this chart auto-scales independently of all others\n\n switchUnitsCallback(tunits)\n return (value: number) => value / tdivider\n }\n // the caller wants specific units\n\n if (typeof scalableUnits[units][desiredUnits] !== \"undefined\") {\n // all good, set the new units\n tdivider = scalableUnits[units][desiredUnits]\n switchUnitsCallback(desiredUnits)\n return (value: number) => value / tdivider\n }\n // oops! switch back to original units\n // eslint-disable-next-line no-console\n console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n is not supported.`)\n\n switchUnitsCallback(units)\n return identity\n } if (typeof convertibleUnits[units] !== \"undefined\") {\n // units that can be converted\n if (desiredUnits === \"auto\") {\n let newConvertFunction: ((number: number) => number | string) | undefined\n Object.keys(convertibleUnits[units]).forEach((x) => {\n if (newConvertFunction) { return }\n if (convertibleUnits[(units as string)][x].check(max)) {\n // converting\n switchUnitsCallback(x)\n newConvertFunction = convertibleUnits[(units as string)][x].convert\n }\n })\n if (newConvertFunction) {\n return newConvertFunction\n }\n\n // none checked ok (no conversion available)\n switchUnitsCallback(units)\n return identity\n } if (typeof convertibleUnits[units][desiredUnits] !== \"undefined\") {\n switchUnitsCallback(desiredUnits)\n return convertibleUnits[units][desiredUnits].convert\n }\n // eslint-disable-next-line no-console\n console.log(`Units conversion from ${units.toString()} to ${desiredUnits.toString()}\n is not supported.`)\n switchUnitsCallback(units)\n return identity\n }\n // hm... did we forget to implement the new type?\n // eslint-disable-next-line no-console\n console.log(`Unmatched unit conversion method for units ${units.toString()}`)\n switchUnitsCallback(units)\n return identity\n },\n}\n","import * as React from \"react\"\nimport classNames from \"classnames\"\n\nimport \"./button.css\"\n\ntype Props = React.ButtonHTMLAttributes<HTMLButtonElement>\nexport const Button = React.forwardRef(({\n children,\n className,\n ...rest\n}: Props, ref: React.Ref<HTMLButtonElement>) => (\n <button\n {...rest} // eslint-disable-line react/jsx-props-no-spreading\n type=\"button\"\n className={classNames(\"netdata-reset-button\", className)}\n ref={ref}\n >\n {children}\n </button>\n))\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectShowHelp } from \"domains/global/selectors\"\nimport { Icon, IconType } from \"components/icon\"\nimport { Button } from \"components/button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface ToolboxButtonProps {\n className?: string\n iconType: IconType\n onClick?: ClickCallback\n onDoubleClick?: (event: React.MouseEvent) => void\n onMouseDown?: (event: React.MouseEvent) => void\n onTouchStart?: (event: React.TouchEvent) => void\n popoverContent: string\n popoverTitle: string\n}\nexport const ToolboxButton = ({\n className,\n iconType,\n onClick,\n onDoubleClick,\n onMouseDown,\n onTouchStart,\n popoverContent,\n popoverTitle,\n}: ToolboxButtonProps) => {\n const buttonRef = useRef(null)\n const showHelp = useSelector(selectShowHelp)\n useEffect(() => {\n if (buttonRef.current && showHelp) {\n window.$(buttonRef.current).popover({\n container: \"body\",\n animation: false,\n html: true,\n trigger: \"hover\",\n placement: \"bottom\",\n delay: {\n show: window.NETDATA.options.current.show_help_delay_show_ms,\n hide: window.NETDATA.options.current.show_help_delay_hide_ms,\n },\n title: popoverTitle,\n content: popoverContent,\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n return (\n <Button\n className={classNames(className)}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseDown={onMouseDown}\n onTouchStart={onTouchStart}\n ref={buttonRef}\n >\n <Icon iconType={iconType} />\n </Button>\n )\n}\n","import { prop, path } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { utmUrlSuffix } from \"utils/utils\"\nimport { alwaysEndWithSlash } from \"utils/server-detection\"\n\nimport { GetKeyArguments, getKeyForCommonColorsState } from \"./reducer\"\nimport { storeKey } from \"./constants\"\nimport { OptionsKey } from \"./options\"\n\nconst NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const createSelectAssignedColors = (args: GetKeyArguments) => (state: AppStateT) => {\n const keyName = getKeyForCommonColorsState(args)\n const substate = state[storeKey].commonColorsKeys[keyName]\n return substate && substate.assigned\n}\n\nexport const selectGlobal = (state: AppStateT) => state.global\n\nexport const selectCommonMin = createSelector(\n selectGlobal,\n (_: unknown, commonMinKey: string) => commonMinKey,\n (globalState, commonMinKey) => (\n globalState.commonMin[commonMinKey]\n ),\n)\n\nexport const selectCommonMax = createSelector(\n selectGlobal,\n (_: unknown, commonMaxKey: string) => commonMaxKey,\n (globalState, commonMaxKey) => (\n globalState.commonMax[commonMaxKey]\n ),\n)\n\nexport const selectGlobalSelection = createSelector(selectGlobal, prop(\"hoveredX\"))\n\nexport const selectGlobalSelectionMaster = createSelector(\n selectGlobal,\n prop(\"currentSelectionMasterId\"),\n)\n\nexport const selectGlobalPanAndZoom = createSelector(selectGlobal, prop(\"globalPanAndZoom\"))\n\nexport const selectDefaultAfter = createSelector(selectGlobal, prop(\"defaultAfter\"))\n\nexport const selectGlobalChartUnderlay = createSelector(selectGlobal, prop(\"globalChartUnderlay\"))\n\nexport const selectHasWindowFocus = createSelector(selectGlobal, prop(\"hasWindowFocus\"))\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 selectSignInUrl = (hasSignedInBefore) => createSelector(\n selectRegistry,\n selectCloudBaseUrl,\n (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}/${hasSignedInBefore ? 'sign-in' : 'sign-up'}?id=${registry.machineGuid}&name=${name}&origin=${origin}${utmUrlSuffix}`\n },\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 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","import React, { useState, useCallback, useEffect } from \"react\"\nimport { ToolboxButton } from \"domains/chart/components/toolbox-button\"\nimport { setResizeHeightAction } from \"domains/chart/actions\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { useDispatch } from \"store/redux-separate-context\"\n\nexport const LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD = \"chart_heights.\"\nexport const LOCALSTORAGE_HEIGHT_KEY_PREFIX = \"chart_height.\"\n\ninterface Props {\n chartContainerElement: HTMLElement\n chartUuid: string\n heightId: string | undefined\n isLegendOnBottom: boolean\n}\n\nexport const ResizeHandler = ({\n chartContainerElement, chartUuid, heightId, isLegendOnBottom,\n}: Props) => {\n const [resizeHeight, setResizeHeight] = useState(() => chartContainerElement.clientHeight)\n const dispatch = useDispatch()\n\n useEffect(() => {\n // todo when attributes.id are present, hook height to localStorage\n if (resizeHeight >= 70) {\n dispatch(\n setResizeHeightAction({\n id: chartUuid,\n resizeHeight,\n }),\n )\n }\n }, [resizeHeight, chartUuid, heightId, dispatch])\n\n const handleResize = useCallback(\n (event) => {\n event.preventDefault()\n const intialHeight = chartContainerElement.clientHeight\n const eventStartHeight = event.type === \"touchstart\"\n ? event.touches[0].clientY\n : event.clientY\n\n const setHeight = (currentHeight: number) => {\n const nextHeight = intialHeight + currentHeight - eventStartHeight\n // eslint-disable-next-line no-param-reassign\n chartContainerElement.style.height = `${nextHeight.toString()}px`\n setResizeHeight(nextHeight)\n if (heightId) {\n const heightForPersistance = isLegendOnBottom\n ? (nextHeight - LEGEND_BOTTOM_SINGLE_LINE_HEIGHT)\n : nextHeight\n localStorage.setItem(\n `${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightId}`,\n `${heightForPersistance}`,\n )\n }\n }\n\n const onMouseMove = (e: MouseEvent) => setHeight(e.clientY)\n const onTouchMove = (e: TouchEvent) => setHeight(e.touches[0].clientY)\n\n const onMouseEnd = () => {\n document.removeEventListener(\"mousemove\", onMouseMove)\n document.removeEventListener(\"mouseup\", onMouseEnd)\n }\n\n const onTouchEnd = () => {\n document.removeEventListener(\"touchmove\", onTouchMove)\n document.removeEventListener(\"touchend\", onTouchEnd)\n }\n\n if (event.type === \"touchstart\") {\n document.addEventListener(\"touchmove\", onTouchMove)\n document.addEventListener(\"touchend\", onTouchEnd)\n } else {\n document.addEventListener(\"mousemove\", onMouseMove)\n document.addEventListener(\"mouseup\", onMouseEnd)\n }\n },\n [chartContainerElement.clientHeight, chartContainerElement.style.height, heightId,\n isLegendOnBottom],\n )\n\n return (\n <ToolboxButton\n className=\"netdata-legend-resize-handler\"\n onDoubleClick={(event: React.MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onMouseDown={handleResize}\n onTouchStart={handleResize}\n iconType=\"resize\"\n popoverTitle=\"Chart Resize\"\n popoverContent=\"Drag this point with your mouse or your finger (on touch devices), to resize\n the chart vertically. You can also <b>double click it</b> or <b>double tap it</b> to reset\n between 2 states: the default and the one that fits all the values.<br/><small>Help\n can be disabled from the settings.</small>\"\n />\n )\n}\n","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 { 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","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} from \"./actions\"\nimport {\n Options, optionsMergedWithLocalStorage, getOptionsMergedWithLocalStorage, clearLocalStorage,\n} from \"./options\"\nimport { CLOUD_BASE_URL_DISABLED } from \"./constants\"\n\ninterface CommonMinMax {\n [commonKey: string]: {\n charts: {\n [chartUuid: string]: number\n }\n currentExtreme: number\n }\n}\n\nexport type StateT = {\n commonColorsKeys: {\n [key: string]: {\n // key can be uuid, chart's context or commonColors attribute\n assigned: {\n // name-value of dimensions and their colors\n [dimensionName: string]: string\n }\n available: string[] // an array of colors available to be used\n custom: string[] // the array of colors defined by the user\n charts: {} // the charts linked to this todo remove\n copyTheme: boolean\n }\n }\n commonMin: CommonMinMax\n commonMax: CommonMinMax\n currentSelectionMasterId: string | null\n globalPanAndZoom: null | {\n after: number // timestamp in ms\n before: number // timestamp in ms\n masterID?: string\n shouldForceTimeRange?: boolean\n }\n defaultAfter: number\n globalChartUnderlay: null | {\n after: number\n before: number\n masterID: string\n }\n hoveredX: number | null\n hasWindowFocus: boolean\n\n spacePanelIsActive: boolean\n spacePanelTransitionEndIsActive: boolean\n\n registry: {\n cloudBaseURL: string | null\n hasFetchedHello: boolean\n isHelloCallError: boolean | null\n hasFetchedInfo: boolean\n hostname: string\n isCloudEnabled: boolean | null\n isCloudAvailable: boolean | null\n isAgentClaimed: boolean | null\n isACLKAvailable: boolean | null\n hasStartedInfo: boolean\n fullInfoPayload: InfoPayload | null\n isFetchingHello: boolean\n machineGuid: string | null\n personGuid: string | null\n registryMachines: { [key: string]: RegistryMachine } | null\n registryMachinesArray: RegistryMachine[] | null\n registryServer: string | null,\n }\n\n chartsMetadata: {\n isFetching: boolean\n isFetchingError: boolean\n data: null | ChartsMetadata\n }\n\n alarms: {\n activeAlarms: null | ActiveAlarms\n hasStartedAlarms: boolean\n }\n alarm: null | Alarm\n\n snapshot: Snapshot | null\n options: Options\n}\n\nexport const initialDefaultAfter = isMainJs ? getInitialAfterFromWindow() : -900\n\nexport const initialState: StateT = {\n commonColorsKeys: {},\n commonMin: {},\n commonMax: {},\n currentSelectionMasterId: null,\n globalPanAndZoom: null,\n // todo for dashboard calculate it based on width and window.NETDATA.chartDefaults.after\n defaultAfter: initialDefaultAfter,\n globalChartUnderlay: null,\n hoveredX: null,\n hasWindowFocus: document.hasFocus(),\n spacePanelIsActive: false, // set to true only for testing layout\n // the same as property above, just updated after transition ends\n spacePanelTransitionEndIsActive: false,\n\n registry: {\n cloudBaseURL: null,\n hasFetchedInfo: false,\n hasFetchedHello: false,\n isHelloCallError: null,\n hostname: \"unknown\",\n isCloudEnabled: null,\n isCloudAvailable: null,\n isAgentClaimed: null,\n isACLKAvailable: null,\n hasStartedInfo: false,\n isFetchingHello: false,\n fullInfoPayload: null,\n machineGuid: null,\n personGuid: null,\n registryMachines: null,\n registryMachinesArray: null,\n registryServer: null,\n },\n\n snapshot: null,\n alarms: {\n activeAlarms: null,\n hasStartedAlarms: false,\n },\n alarm: null,\n\n chartsMetadata: {\n isFetching: false,\n isFetchingError: false,\n data: null,\n },\n\n options: optionsMergedWithLocalStorage,\n}\n\nexport const globalReducer = createReducer<StateT>({}, initialState)\n\nexport interface GetKeyArguments {\n colorsAttribute: string | undefined\n commonColorsAttribute: string | undefined\n chartUuid: string\n chartContext: string\n}\nexport const getKeyForCommonColorsState = ({\n colorsAttribute,\n commonColorsAttribute,\n chartUuid,\n chartContext,\n}: GetKeyArguments) => {\n const hasCustomColors = typeof colorsAttribute === \"string\" && colorsAttribute.length > 0\n\n // when there's commonColors attribute, share the state between all charts with that attribute\n // if not, when there are custom colors, make each chart independent\n // if not, share the same state between charts with the same context\n return commonColorsAttribute || (hasCustomColors ? chartUuid : chartContext)\n}\n\nconst hasLastOnly = (array: string[]) => last(array) === \"ONLY\"\nconst removeLastOnly = (array: string[]) => (hasLastOnly(array) ? init(array) : array)\nconst createCommonColorsKeysSubstate = (\n colorsAttribute: string | undefined,\n hasCustomColors: boolean,\n) => {\n const custom = hasCustomColors ? removeLastOnly((colorsAttribute as string).split(\" \")) : []\n const shouldCopyTheme = hasCustomColors\n // disable copyTheme when there's \"ONLY\" keyword in \"data-colors\" attribute\n ? !hasLastOnly((colorsAttribute as string).split(\" \"))\n : true\n const available = [\n ...custom,\n ...(shouldCopyTheme || custom.length === 0 ? window.NETDATA.themes.current.colors : []),\n ]\n return {\n assigned: {},\n available,\n custom,\n }\n}\n\nglobalReducer.on(\n requestCommonColorsAction,\n //@ts-ignore\n (state, {\n chartContext, chartUuid, colorsAttribute, commonColorsAttribute, dimensionNames,\n }) => {\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 = 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\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(\n setGlobalPanAndZoomAction,\n (state, payload) => ({\n ...state,\n globalPanAndZoom: payload,\n }),\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\n\nglobalReducer.on(clearHighlightAction, (state, { resetPanAndZoom = true }:{ resetPanAndZoom?: boolean } = {}) => ({\n ...state,\n globalChartUnderlay: initialState.globalChartUnderlay,\n ...(resetPanAndZoom ? {globalPanAndZoom: initialState.globalPanAndZoom}: {}),\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(fetchHelloAction.request, (state) => ({\n ...state,\n registry: {\n ...state.registry,\n isFetchingHello: true,\n },\n}))\n\nglobalReducer.on(fetchHelloAction.success, (state, {\n cloudBaseURL, hostname, machineGuid,\n}) => ({\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(fetchInfoAction.success, (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\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(updatePersonUrlsAction, (state, {\n personGuid, registryMachines, registryMachinesArray,\n}) => ({\n ...state,\n registry: {\n ...state.registry,\n personGuid,\n registryMachines,\n registryMachinesArray,\n },\n}))\n\nglobalReducer.on(startAlarmsAction, (state) => ({\n ...state,\n alarms: {\n ...state.alarms,\n hasStartedAlarms: true,\n },\n}))\n\nglobalReducer.on(updateActiveAlarmsAction, (state, { activeAlarms }) => ({\n ...state,\n alarms: {\n ...state.alarms,\n activeAlarms,\n },\n}))\n\nglobalReducer.on(setOptionAction, (state, { key, value }) => ({\n ...state,\n options: {\n ...state.options,\n [key]: value,\n },\n}))\n\nglobalReducer.on(resetOptionsAction, (state) => {\n clearLocalStorage()\n return {\n ...state,\n options: getOptionsMergedWithLocalStorage(),\n }\n})\n\nglobalReducer.on(loadSnapshotAction, (state, { snapshot }) => {\n const parsedData = Object.keys(snapshot.data)\n .map((dataKey) => {\n let uncompressed\n try {\n // @ts-ignore\n uncompressed = snapshot.uncompress(snapshot.data[dataKey])\n\n // repeat old logging\n if (uncompressed === null) {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is null`)\n return null\n }\n\n if (typeof uncompressed === \"undefined\") {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is undefined`)\n return null\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`decompression of snapshot data for key ${dataKey} failed`, e)\n uncompressed = null\n }\n\n if (typeof uncompressed !== \"string\") {\n // eslint-disable-next-line no-console\n console.warn(`uncompressed snapshot data for key ${dataKey} is not string`)\n return {}\n }\n\n let data\n try {\n data = JSON.parse(uncompressed)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn(`parsing snapshot data for key ${dataKey} failed`)\n return {}\n }\n\n return { [dataKey]: data }\n })\n .reduce((acc, obj) => ({ ...acc, ...obj }), {})\n\n return {\n ...state,\n snapshot: {\n ...snapshot,\n data: parsedData as { [key: string]: unknown },\n },\n }\n})\n\nglobalReducer.on(setAlarmAction, (state, { alarm }) => ({\n ...state,\n alarm,\n}))\n\nglobalReducer.on(chartsMetadataRequestSuccess, (state, { data }) => ({\n ...state,\n chartsMetadata: {\n ...state.chartsMetadata,\n data,\n },\n}))\n","import React from \"react\"\nimport classNames from \"classnames\"\n\n// todo add supoort for window.netdataIcons\nexport type IconType = \"left\" | \"reset\" | \"right\" | \"zoomIn\" | \"zoomOut\" | \"resize\" | \"lineChart\"\n | \"areaChart\" | \"noChart\" | \"loading\" | \"noData\"\nconst typeToClassName = (iconType: IconType) => ({\n left: \"fa-backward\",\n reset: \"fa-play\",\n right: \"fa-forward\",\n zoomIn: \"fa-plus\",\n zoomOut: \"fa-minus\",\n resize: \"fa-sort\",\n lineChart: \"fa-chart-line\",\n areaChart: \"fa-chart-area\",\n noChart: \"fa-chart-area\",\n loading: \"fa-sync-alt\",\n noData: \"fa-exclamation-triangle\",\n} as {[key in IconType]: string})[iconType]\n\ninterface Props {\n iconType: IconType\n}\nexport const Icon = ({ iconType }: Props) => (\n <i className={classNames(\"fas\", typeToClassName(iconType))} />\n)\n","import {\n map, omit, assoc, pick,\n} from \"ramda\"\nimport { createReducer } from \"redux-act\"\n\nimport { setOptionAction } from \"domains/global/actions\"\nimport { SYNC_PAN_AND_ZOOM } from \"domains/global/options\"\nimport { useNewKeysOnlyIfDifferent } from \"utils/utils\"\n\nimport {\n fetchDataAction,\n fetchChartAction,\n setResizeHeightAction,\n clearChartStateAction,\n fetchDataForSnapshotAction,\n snapshotExportResetAction,\n setChartPanAndZoomAction,\n resetChartPanAndZoomAction,\n fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartState } from \"./chart-types\"\n\nexport type StateT = {\n [chartID: string]: ChartState\n}\n\nexport const initialState = {\n}\nexport const initialSingleState = {\n chartData: null,\n chartId: null,\n chartMetadata: null,\n chartPanAndZoom: null,\n fetchDataParams: {\n isRemotelyControlled: false,\n viewRange: null,\n },\n isFetchingData: false,\n isFetchDataFailure: false,\n isFetchDetailsFailure: false,\n isFetchingDetails: false,\n resizeHeight: null,\n\n snapshotDataIsFetching: false,\n snapshotDataIsError: false,\n snapshotData: null,\n viewRange: null,\n}\n\nexport const chartReducer = createReducer<StateT>(\n {},\n initialState,\n)\n\nexport const getSubstate = (state: StateT, id: string) => state[id] || initialSingleState\n\nchartReducer.on(fetchDataAction.request, (state, { chart, fetchDataParams, id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartId: chart,\n isFetchingData: true,\n viewRange: fetchDataParams.viewRange,\n },\n}))\n\nchartReducer.on(fetchDataCancelAction, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingData: false,\n },\n}))\n\nchartReducer.on(fetchDataAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingData: false,\n isFetchDataFailure: true,\n },\n}))\n\nchartReducer.on(fetchDataAction.success, (state, { id, chartData, fetchDataParams }) => {\n const substate = getSubstate(state, id)\n return {\n ...state,\n [id]: {\n ...substate,\n chartData: useNewKeysOnlyIfDifferent([\"dimension_names\"], substate.chartData, chartData!),\n fetchDataParams,\n isFetchingData: false,\n isFetchDataFailure: false,\n viewRange: fetchDataParams.viewRange,\n },\n }\n})\n\n\nchartReducer.on(fetchDataForSnapshotAction.request, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: true,\n },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: false,\n snapshotDataIsError: true,\n },\n}))\n\nchartReducer.on(fetchDataForSnapshotAction.success, (state, { id, snapshotData }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n snapshotDataIsFetching: false,\n snapshotDataIsError: false,\n snapshotData,\n },\n}))\n\nchartReducer.on(snapshotExportResetAction, (state) => map((substate) => ({\n ...substate,\n ...pick([\"snapshotDataIsFetching\", \"snapshotDataIsError\", \"snapshotData\"], initialSingleState),\n}), state))\n\n\nchartReducer.on(fetchChartAction.request, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchingDetails: true,\n },\n}))\n\nchartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n isFetchDetailsFailure: true,\n },\n}))\n\nchartReducer.on(fetchChartAction.success, (state, { id, chartMetadata }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartMetadata,\n isFetchingDetails: false,\n isFetchDetailsFailure: false,\n },\n}))\n\n// todo handle errors without creating a loop\n// chartReducer.on(fetchChartAction.failure, (state, { id }) => ({\n// ...state,\n// [id]: {\n// ...getSubstate(state, id),\n// isFetchingDetails: false,\n// },\n// }))\n\nchartReducer.on(setResizeHeightAction, (state, { id, resizeHeight }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n resizeHeight,\n },\n}))\n\nchartReducer.on(setChartPanAndZoomAction, (state, {\n after, before, id, shouldForceTimeRange,\n}) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartPanAndZoom: { after, before, shouldForceTimeRange },\n },\n}))\n\nchartReducer.on(resetChartPanAndZoomAction, (state, { id }) => ({\n ...state,\n [id]: {\n ...getSubstate(state, id),\n chartPanAndZoom: initialSingleState.chartPanAndZoom,\n },\n}))\n\nchartReducer.on(setOptionAction, (state, { key, value }) => {\n // clear chartPanAndZoom, when SYNC_PAN_AND_ZOOM flag is turned on\n if (key === SYNC_PAN_AND_ZOOM && value === true) {\n return map(\n assoc(\"chartPanAndZoom\", initialSingleState.chartPanAndZoom),\n state,\n )\n }\n return state\n})\n\nchartReducer.on(clearChartStateAction, (state, { id }) => omit([id], state))\n","import { mapObjIndexed, mergeAll, isEmpty } from \"ramda\"\nimport { Method } from \"axios\"\nimport { initialLegendRight } from \"domains/global/options\"\nimport { ChartLibraryName } from \"./chartLibrariesSettings\"\n\ntype OutputValue = string | boolean | number | null | undefined | any[]\n// almost the same as in old dashboard to ensure readers that it works the same way\nconst getDataAttribute = (element: Element, key: string, defaultValue?: OutputValue) => {\n const dataKey = `data-${key}`\n if (element.hasAttribute(dataKey)) {\n // we know it's not null because of hasAttribute()\n const data = element.getAttribute(dataKey) as string\n\n if (data === \"true\") {\n return true\n }\n if (data === \"false\") {\n return false\n }\n if (data === \"null\") {\n return null\n }\n\n // Only convert to a number if it doesn't change the string\n if (data === `${+data}`) {\n return +data\n }\n\n if (/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/.test(data)) {\n return JSON.parse(data)\n }\n\n return data\n }\n // if no default is passed, then it's undefined and can be replaced with default value later\n // it is recommended to do it in props destructuring assignment phase, ie.:\n // const Chart = ({ dygraphPointsize = 1 }) => ....\n return defaultValue\n}\n\nconst getDataAttributeBoolean = (element: Element, key: string, defaultValue?: boolean) => {\n const value = getDataAttribute(element, key, defaultValue)\n\n if (value === true || value === false) { // gmosx: Love this :)\n return value\n }\n\n if (typeof (value) === \"string\") {\n if (value === \"yes\" || value === \"on\") {\n return true\n }\n\n if (value === \"\" || value === \"no\" || value === \"off\" || value === \"null\") {\n return false\n }\n\n return defaultValue\n }\n\n if (typeof (value) === \"number\") {\n return value !== 0\n }\n\n return defaultValue\n}\n\ninterface BaseAttributeConfig {\n key: string\n defaultValue?: OutputValue\n}\ninterface BooleanAttributeConfig extends BaseAttributeConfig {\n type: \"boolean\"\n defaultValue?: boolean\n}\ntype AttributeConfig = BaseAttributeConfig | BooleanAttributeConfig\n\nexport interface StaticAttributes {\n id: string\n host?: string | undefined\n httpMethod?: Method\n title?: string\n chartLibrary: ChartLibraryName\n width: number | string | null\n height?: number | string | null\n after?: number\n before?: number\n legend?: boolean\n legendPosition?: \"bottom\" | \"right\"\n units?: string\n unitsCommon?: string\n unitsDesired?: string\n aggrMethod?: string\n labels?: {[key: string]: string}\n postGroupBy?: string\n dimensionsAggrMethod?: string\n postAggregationMethod?: string\n aggrGroups?: string[]\n selectedChart?: string\n filteredRows?: string[] | null\n groupBy?: string\n nodeIDs?: string[]\n colors?: string\n commonColors?: string\n decimalDigits?: number\n dimensions?: string\n selectedDimensions?: string[]\n forceTimeWindow?: boolean\n\n appendOptions?: string | undefined\n gtime?: number\n method?: string\n overrideOptions?: string\n pixelsPerPoint?: number\n points?: number\n heightId?: string\n hideResizeHandler?: boolean\n detectResize?: boolean\n commonMin?: string\n commonMax?: string\n\n dygraphType?: string\n dygraphValueRange?: any[]\n dygraphTheme?: string\n dygraphSmooth?: boolean\n dygraphColors?: string[]\n dygraphRightGap?: number\n dygraphShowRangeSelector?: boolean\n dygraphShowRoller?: boolean\n dygraphTitle?: string\n dygraphTitleHeight?: number\n dygraphLegend?: \"always\" | \"follow\" | \"onmouseover\" | \"never\"\n dygraphLabelsDiv?: string\n dygraphLabelsSeparateLine?: boolean\n dygraphIncludeZero?: boolean\n dygraphShowZeroValues?: boolean\n dygraphShowLabelsOnHighLight?: boolean\n dygraphHideOverlayOnMouseOut?: boolean\n dygraphXRangePad?: number\n dygraphYRangePad?: number\n dygraphYLabelWidth?: number\n dygraphStrokeWidth?: number\n dygraphStrokePattern?: number[]\n dygraphDrawPoints?: boolean\n dygraphDrawGapEdgePoints?: boolean\n dygraphConnectSeparatedPoints?: boolean\n dygraphPointSize?: number\n dygraphStepPlot?: boolean\n dygraphStrokeBorderColor?: string\n dygraphStrokeBorderWidth?: number\n dygraphFillGraph?: boolean\n dygraphFillAlpha?: number\n dygraphStackedGraph?: boolean\n dygraphStackedGraphNanFill?: string\n dygraphAxisLabelFontSize?: number\n dygraphAxisLineColor?: string\n dygraphAxisLineWidth?: number\n dygraphDrawGrid?: boolean\n dygraphGridLinePattern?: number[]\n dygraphGridLineWidth?: number\n dygraphGridLineColor?: string\n dygraphMaxNumberWidth?: number\n dygraphSigFigs?: number\n dygraphDigitsAfterDecimal?: number\n dygraphHighlighCircleSize?: number\n dygraphHighlightSeriesOpts?: {[options: string]: number}\n dygraphHighlightSeriesBackgroundAlpha?: number\n dygraphXPixelsPerLabel?: number\n dygraphXAxisLabelWidth?: number\n dygraphDrawXAxis?: boolean\n dygraphYPixelsPerLabel?: number\n dygraphYAxisLabelWidth?: number\n dygraphDrawYAxis?: boolean\n dygraphDrawAxis?: boolean\n\n easyPieChartMinValue?: number\n easyPieChartMaxValue?: number\n easyPieChartBarColor?: string\n easyPieChartTrackColor?: string\n easyPieChartScaleColor?: string,\n easyPieChartScaleLength?: number,\n easyPieChartLineCap?: string,\n easyPieChartLineWidth?: string,\n easyPieChartTrackWidth?: string,\n easyPieChartSize?: string,\n easyPieChartRotate?: number,\n easyPieChartAnimate?: string,\n easyPieChartEasing?: string,\n\n gaugeMinValue?: number,\n gaugeMaxValue?: number,\n gaugePointerColor?: string,\n gaugeStrokeColor?: string,\n gaugeStartColor?: string,\n gaugeStopColor?: string,\n gaugeGenerateGradient?: boolean | string[],\n\n sparklineType?: string,\n sparklineLineColor?: string,\n sparklineFillColor?: string,\n sparklineChartRangeMin?: string,\n sparklineChartRangeMax?: string,\n sparklineComposite?: string,\n sparklineEnableTagOptions?: string,\n sparklineTagOptionPrefix?: string,\n sparklineTagValuesAttribute?: string,\n sparklineDisableHiddenCheck?: string,\n sparklineDefaultPixelsPerValue?: string,\n sparklineSpotColor?: string,\n sparklineMinSpotColor?: string,\n sparklineMaxSpotColor?: string,\n sparklineSpotRadius?: string,\n sparklineValueSpots?: string,\n sparklineHighlightSpotColor?: string,\n sparklineHighlightLineColor?: string,\n sparklineLineWidth?: string,\n sparklineNormalRangeMin?: string,\n sparklineNormalRangeMax?: string,\n sparklineDrawNormalOnTop?: string,\n sparklineXvalues?: string,\n sparklineChartRangeClip?: string,\n sparklineChartRangeMinX?: string,\n sparklineChartRangeMaxX?: string,\n sparklineDisableInteraction?: boolean,\n sparklineDisableTooltips?: boolean,\n sparklineOnHover?: Function,\n sparklineDisableHighlight?: boolean,\n sparklineHighlightLighten?: string,\n sparklineHighlightColor?: string,\n sparklineTooltipContainer?: string,\n sparklineTooltipClassname?: string,\n sparklineTooltipFormat?: string,\n sparklineTooltipPrefix?: string,\n sparklineTooltipSuffix?: string,\n sparklineTooltipSkipNull?: boolean,\n sparklineTooltipValueLookups?: string,\n sparklineTooltipFormatFieldlist?: string,\n sparklineTooltipFormatFieldlistKey?: string,\n sparklineNumberFormatter?: (d: number) => string,\n sparklineNumberDigitGroupSep?: string,\n sparklineNumberDecimalMark?: string,\n sparklineNumberDigitGroupCount?: string,\n sparklineAnimatedZooms?: boolean,\n\n\n d3pieTitle?: string,\n d3pieSubtitle?: string,\n d3pieFooter?: string,\n d3pieTitleColor?: string,\n d3pieTitleFontsize?: string,\n d3pieTitleFontweight?: string,\n d3pieTitleFont?: string,\n d3PieSubtitleColor?: string,\n d3PieSubtitleFontsize?: string,\n d3PieSubtitleFontweight?: string,\n d3PieSubtitleFont?: string,\n d3PieFooterColor?: string,\n d3PieFooterFontsize?: string,\n d3PieFooterFontweight?: string,\n d3PieFooterFont?: string,\n d3PieFooterLocation?: string,\n d3PiePieinnerradius?: string,\n d3PiePieouterradius?: string,\n d3PieSortorder?: string,\n d3PieSmallsegmentgroupingEnabled?: boolean,\n d3PieSmallsegmentgroupingValue?: string,\n d3PieSmallsegmentgroupingValuetype?: string,\n d3PieSmallsegmentgroupingLabel?: string,\n d3PieSmallsegmentgroupingColor?: string,\n d3PieLabelsOuterFormat?: string,\n d3PieLabelsOuterHidewhenlessthanpercentage?: string,\n d3PieLabelsOuterPiedistance?: string,\n d3PieLabelsInnerFormat?: string,\n d3PieLabelsInnerHidewhenlessthanpercentage?: string,\n d3PieLabelsMainLabelColor?: string,\n d3PieLabelsMainLabelFont?: string,\n d3PieLabelsMainLabelFontsize?: string,\n d3PieLabelsMainLabelFontweight?: string,\n d3PieLabelsPercentageColor?: string,\n d3PieLabelsPercentageFont?: string,\n d3PieLabelsPercentageFontsize?: string,\n d3PieLabelsPercentageFontweight?: string,\n d3PieLabelsValueColor?: string,\n d3PieLabelsValueFont?: string,\n d3PieLabelsValueFontsize?: string,\n d3PieLabelsValueFontweight?: string,\n d3PieLabelsLinesEnabled?: boolean,\n d3PieLabelsLinesStyle?: string,\n d3PieLabelsLinesColor?: string,\n d3PieLabelsTruncationEnabled?: boolean,\n d3PieLabelsTruncationTruncatelength?: string,\n d3PieMiscColorsSegmentstroke?: string,\n d3PieMiscGradientEnabled?: boolean,\n d3PieMiscColorsPercentage?: string,\n d3PieMiscGradientColor?: string,\n d3PieCssprefix?: string,\n\n peityStrokeWidth?: number,\n\n textOnlyDecimalPlaces?: number,\n textOnlyPrefix?: string,\n textOnlySuffix?: string,\n}\n\nexport interface Attributes extends StaticAttributes {\n // changed structure compared to original dashboard.js (not flat list, but dynamic objects stored\n // in \"showValueOf\" property\n showValueOf?: { [key: string]: string }\n}\n\nexport interface ChartsAttributes {\n [chartID:string]: Attributes\n}\n\nexport type AttributePropKeys = keyof StaticAttributes\n\ntype AttributesMap = {\n [key in AttributePropKeys]: AttributeConfig\n}\n\n// needs to be a getter so all window.NETDATA settings are set\nconst getAttributesMap = (): AttributesMap => ({\n // all properties that don't have `defaultValue` should be \"| undefined\" in Attributes interface\n // todo try to write above rule in TS\n id: { key: \"netdata\" },\n host: { key: \"host\" },\n httpMethod: { key: \"http-method\" },\n title: { key: \"title\" },\n chartLibrary: { key: \"chart-library\", defaultValue: window.NETDATA.chartDefaults.library },\n width: { key: \"width\", defaultValue: window.NETDATA.chartDefaults.width },\n height: { key: \"height\", defaultValue: window.NETDATA.chartDefaults.height },\n // todo use chartDefaults for static custom dashboards\n // after: { key: \"after\", defaultValue: window.NETDATA.chartDefaults.after },\n after: { key: \"after\" },\n before: { key: \"before\", defaultValue: window.NETDATA.chartDefaults.before },\n legend: { key: \"legend\", type: \"boolean\", defaultValue: true },\n legendPosition: { key: \"legend-position\" },\n units: { key: \"units\" },\n unitsCommon: { key: \"common-units\" },\n unitsDesired: { key: \"desired-units\" },\n aggrMethod: { key: \"aggr-method\" },\n labels: { key: \"labels\" },\n postGroupBy: { key: \"post-group-by\" },\n postAggregationMethod: { key: \"post-aggregation-method\" },\n dimensionsAggrMethod: { key: \"dimensions-aggr-method\" },\n aggrGroups: { key: \"aggrGroups\" },\n selectedChart: { key: \"selected-chart\" },\n filteredRows: { key: \"filtered-rows\" },\n groupBy: { key: \"group-by\" },\n nodeIDs: { key: \"node-ids\" },\n colors: { key: \"colors\" },\n commonColors: { key: \"common-colors\" },\n decimalDigits: { key: \"decimal-digits\" },\n dimensions: { key: \"dimensions\" },\n selectedDimensions: { key: \"selected-dimensions\" },\n forceTimeWindow: { key: \"force-time-window\" },\n\n appendOptions: { key: \"append-options\" },\n gtime: { key: \"gtime\" },\n method: { key: \"method\" },\n overrideOptions: { key: \"override-options\" },\n pixelsPerPoint: { key: \"pixels-per-point\" },\n points: { key: \"points\" },\n heightId: { key: \"id\" },\n hideResizeHandler: { key: \"hide-resize-handler\" },\n detectResize: { key: \"detect-resize\" },\n commonMin: { key: \"common-min\" },\n commonMax: { key: \"common-max\" },\n\n // let's not put the default values here, because they will also be needed by the main Agent page\n // and the Cloud App\n dygraphType: { key: \"dygraph-type\" },\n dygraphValueRange: { key: \"dygraph-valuerange\" },\n dygraphTheme: { key: \"dygraph-theme\" },\n dygraphSmooth: { key: \"dygraph-smooth\", type: \"boolean\" },\n dygraphColors: { key: \"dygraph-colors\" }, // not working in original dashboard\n dygraphRightGap: { key: \"dygraph-rightgap\" },\n dygraphShowRangeSelector: { key: \"dygraph-showrangeselector\", type: \"boolean\" },\n dygraphShowRoller: { key: \"dygraph-showroller\", type: \"boolean\" },\n dygraphTitle: { key: \"dygraph-title\" },\n dygraphTitleHeight: { key: \"dygraph-titleheight\" },\n dygraphLegend: { key: \"dygraph-legend\" },\n dygraphLabelsDiv: { key: \"dygraph-labelsdiv\" },\n dygraphLabelsSeparateLine: { key: \"dygraph-labelsseparatelines\", type: \"boolean\" },\n dygraphIncludeZero: { key: \"dygraph-includezero\", type: \"boolean\" },\n dygraphShowZeroValues: { key: \"dygraph-labelsshowzerovalues\", type: \"boolean\" },\n dygraphShowLabelsOnHighLight: { key: \"dygraph-showlabelsonhighlight\", type: \"boolean\" },\n dygraphHideOverlayOnMouseOut: { key: \"dygraph-hideoverlayonmouseout\", type: \"boolean\" },\n dygraphXRangePad: { key: \"dygraph-xrangepad\" },\n dygraphYRangePad: { key: \"dygraph-yrangepad\" },\n dygraphYLabelWidth: { key: \"dygraph-ylabelwidth\" },\n dygraphStrokeWidth: { key: \"dygraph-strokewidth\" },\n dygraphStrokePattern: { key: \"dygraph-strokepattern\" },\n dygraphDrawPoints: { key: \"dygraph-drawpoints\", type: \"boolean\" },\n dygraphDrawGapEdgePoints: { key: \"dygraph-drawgapedgepoints\", type: \"boolean\" },\n dygraphConnectSeparatedPoints: { key: \"dygraph-connectseparatedpoints\", type: \"boolean\" },\n dygraphPointSize: { key: \"dygraph-pointsize\" },\n dygraphStepPlot: { key: \"dygraph-stepplot\", type: \"boolean\" },\n dygraphStrokeBorderColor: { key: \"dygraph-strokebordercolor\" },\n dygraphStrokeBorderWidth: { key: \"dygraph-strokeborderwidth\" },\n // it was not boolean in the old app, but that was most likely a bug\n dygraphFillGraph: { key: \"dygraph-fillgraph\", type: \"boolean\" },\n dygraphFillAlpha: { key: \"dygraph-fillalpha\" },\n // also originally not set as boolean\n dygraphStackedGraph: { key: \"dygraph-stackedgraph\", type: \"boolean\" },\n dygraphStackedGraphNanFill: { key: \"dygraph-stackedgraphnanfill\" },\n dygraphAxisLabelFontSize: { key: \"dygraph-axislabelfontsize\" },\n dygraphAxisLineColor: { key: \"dygraph-axislinecolor\" },\n dygraphAxisLineWidth: { key: \"dygraph-axislinewidth\" },\n dygraphDrawGrid: { key: \"dygraph-drawgrid\", type: \"boolean\" },\n dygraphGridLinePattern: { key: \"dygraph-gridlinepattern\" },\n dygraphGridLineWidth: { key: \"dygraph-gridlinewidth\" },\n dygraphGridLineColor: { key: \"dygraph-gridlinecolor\" },\n dygraphMaxNumberWidth: { key: \"dygraph-maxnumberwidth\" },\n dygraphSigFigs: { key: \"dygraph-sigfigs\" },\n dygraphDigitsAfterDecimal: { key: \"dygraph-digitsafterdecimal\" },\n // dygraphValueFormatter: { key: \"dygraph-valueformatter\" },\n dygraphHighlighCircleSize: { key: \"dygraph-highlightcirclesize\" },\n dygraphHighlightSeriesOpts: { key: \"dygraph-highlightseriesopts\" },\n dygraphHighlightSeriesBackgroundAlpha: { key: \"dygraph-highlightseriesbackgroundalpha\" },\n // dygraphPointClickCallback: { key: \"dygraph-pointclickcallback\" },\n dygraphXPixelsPerLabel: { key: \"dygraph-xpixelsperlabel\" },\n dygraphXAxisLabelWidth: { key: \"dygraph-xaxislabelwidth\" },\n dygraphDrawXAxis: { key: \"dygraph-drawxaxis\", type: \"boolean\" },\n dygraphYPixelsPerLabel: { key: \"dygraph-ypixelsperlabel\" },\n dygraphYAxisLabelWidth: { key: \"dygraph-yaxislabelwidth\" },\n dygraphDrawYAxis: { key: \"dygraph-drawyaxis\", type: \"boolean\" },\n dygraphDrawAxis: { key: \"dygraph-drawaxis\", type: \"boolean\" },\n\n easyPieChartMinValue: { key: \"easypiechart-min-value\" },\n easyPieChartMaxValue: { key: \"easypiechart-max-value\" },\n easyPieChartBarColor: { key: \"easypiechart-barcolor\" },\n easyPieChartTrackColor: { key: \"easypiechart-trackcolor\" },\n easyPieChartScaleColor: { key: \"easypiechart-scalecolor\" },\n easyPieChartScaleLength: { key: \"easypiechart-scalelength\" },\n easyPieChartLineCap: { key: \"easypiechart-linecap\" },\n easyPieChartLineWidth: { key: \"easypiechart-linewidth\" },\n easyPieChartTrackWidth: { key: \"easypiechart-trackwidth\" },\n easyPieChartSize: { key: \"easypiechart-size\" },\n easyPieChartRotate: { key: \"easypiechart-rotate\" },\n easyPieChartAnimate: { key: \"easypiechart-animate\" },\n easyPieChartEasing: { key: \"easypiechart-easing\" },\n\n gaugeMinValue: { key: \"gauge-min-value\" },\n gaugeMaxValue: { key: \"gauge-max-value\" },\n gaugePointerColor: { key: \"gauge-pointer-color\" },\n gaugeStrokeColor: { key: \"gauge-stroke-color\" },\n gaugeStartColor: { key: \"gauge-start-color\" },\n gaugeStopColor: { key: \"gauge-stop-color\" },\n gaugeGenerateGradient: { key: \"gauge-generate-gradient\" },\n\n sparklineType: { key: \"sparkline-type\" },\n sparklineLineColor: { key: \"sparkline-linecolor\" },\n sparklineFillColor: { key: \"sparkline-fillcolor\" },\n sparklineChartRangeMin: { key: \"sparkline-chartrangemin\" },\n sparklineChartRangeMax: { key: \"sparkline-chartrangemax\" },\n sparklineComposite: { key: \"sparkline-composite\" },\n sparklineEnableTagOptions: { key: \"sparkline-enabletagoptions\" },\n sparklineTagOptionPrefix: { key: \"sparkline-tagoptionprefix\" },\n sparklineTagValuesAttribute: { key: \"sparkline-tagvaluesattribute\" },\n sparklineDisableHiddenCheck: { key: \"sparkline-disablehiddencheck\" },\n sparklineDefaultPixelsPerValue: { key: \"sparkline-defaultpixelspervalue\" },\n sparklineSpotColor: { key: \"sparkline-spotcolor\" },\n sparklineMinSpotColor: { key: \"sparkline-minspotcolor\" },\n sparklineMaxSpotColor: { key: \"sparkline-maxspotcolor\" },\n sparklineSpotRadius: { key: \"sparkline-spotradius\" },\n sparklineValueSpots: { key: \"sparkline-valuespots\" },\n sparklineHighlightSpotColor: { key: \"sparkline-highlightspotcolor\" },\n sparklineHighlightLineColor: { key: \"sparkline-highlightlinecolor\" },\n sparklineLineWidth: { key: \"sparkline-linewidth\" },\n sparklineNormalRangeMin: { key: \"sparkline-normalrangemin\" },\n sparklineNormalRangeMax: { key: \"sparkline-normalrangemax\" },\n sparklineDrawNormalOnTop: { key: \"sparkline-drawnormalontop\" },\n sparklineXvalues: { key: \"sparkline-xvalues\" },\n sparklineChartRangeClip: { key: \"sparkline-chartrangeclip\" },\n sparklineChartRangeMinX: { key: \"sparkline-chartrangeminx\" },\n sparklineChartRangeMaxX: { key: \"sparkline-chartrangemaxx\" },\n sparklineDisableInteraction: { key: \"sparkline-disableinteraction\", type: \"boolean\" },\n sparklineDisableTooltips: { key: \"sparkline-disabletooltips\", type: \"boolean\" },\n sparklineOnHover: { key: \"sparkline-on-hover\" },\n sparklineDisableHighlight: { key: \"sparkline-disablehighlight\", type: \"boolean\" },\n sparklineHighlightLighten: { key: \"sparkline-highlightlighten\" },\n sparklineHighlightColor: { key: \"sparkline-highlightcolor\" },\n sparklineTooltipContainer: { key: \"sparkline-tooltipcontainer\" },\n sparklineTooltipClassname: { key: \"sparkline-tooltipclassname\" },\n sparklineTooltipFormat: { key: \"sparkline-tooltipformat\" },\n sparklineTooltipPrefix: { key: \"sparkline-tooltipprefix\" },\n sparklineTooltipSuffix: { key: \"sparkline-tooltipsuffix\" },\n sparklineTooltipSkipNull: { key: \"sparkline-tooltipskipnull\", type: \"boolean\" },\n sparklineTooltipValueLookups: { key: \"sparkline-tooltipvaluelookups\" },\n sparklineTooltipFormatFieldlist: { key: \"sparkline-tooltipformatfieldlist\" },\n sparklineTooltipFormatFieldlistKey: { key: \"sparkline-tooltipformatfieldlistkey\" },\n sparklineNumberFormatter: { key: \"sparkline-numberformatter\" },\n sparklineNumberDigitGroupSep: { key: \"sparkline-numberdigitgroupsep\" },\n sparklineNumberDecimalMark: { key: \"sparkline-numberdecimalmark\" },\n sparklineNumberDigitGroupCount: { key: \"sparkline-numberdigitgroupcount\" },\n sparklineAnimatedZooms: { key: \"sparkline-animatedzooms\", type: \"boolean\" },\n\n d3pieTitle: { key: \"d3pie-title\" },\n d3pieSubtitle: { key: \"d3pie-subtitle\" },\n d3pieFooter: { key: \"d3pie-footer\" },\n d3pieTitleColor: { key: \"d3pie-title-color\" },\n d3pieTitleFontsize: { key: \"d3pie-title-fontsize\" },\n d3pieTitleFontweight: { key: \"d3pie-title-fontweight\" },\n d3pieTitleFont: { key: \"d3pie-title-font\" },\n d3PieSubtitleColor: { key: \"d3pie-subtitle-color\" },\n d3PieSubtitleFontsize: { key: \"d3pie-subtitle-fontsize\" },\n d3PieSubtitleFontweight: { key: \"d3pie-subtitle-fontweight\" },\n d3PieSubtitleFont: { key: \"d3pie-subtitle-font\" },\n d3PieFooterColor: { key: \"d3pie-footer-color\" },\n d3PieFooterFontsize: { key: \"d3pie-footer-fontsize\" },\n d3PieFooterFontweight: { key: \"d3pie-footer-fontweight\" },\n d3PieFooterFont: { key: \"d3pie-footer-font\" },\n d3PieFooterLocation: { key: \"d3pie-footer-location\" },\n d3PiePieinnerradius: { key: \"d3pie-pieinnerradius\" },\n d3PiePieouterradius: { key: \"d3pie-pieouterradius\" },\n d3PieSortorder: { key: \"d3pie-sortorder\" },\n d3PieSmallsegmentgroupingEnabled: { key: \"d3pie-smallsegmentgrouping-enabled\", type: \"boolean\" },\n d3PieSmallsegmentgroupingValue: { key: \"d3pie-smallsegmentgrouping-value\" },\n d3PieSmallsegmentgroupingValuetype: { key: \"d3pie-smallsegmentgrouping-valuetype\" },\n d3PieSmallsegmentgroupingLabel: { key: \"d3pie-smallsegmentgrouping-label\" },\n d3PieSmallsegmentgroupingColor: { key: \"d3pie-smallsegmentgrouping-color\" },\n d3PieLabelsOuterFormat: { key: \"d3pie-labels-outer-format\" },\n d3PieLabelsOuterHidewhenlessthanpercentage: {\n key: \"d3pie-labels-outer-hidewhenlessthanpercentage\",\n },\n d3PieLabelsOuterPiedistance: { key: \"d3pie-labels-outer-piedistance\" },\n d3PieLabelsInnerFormat: { key: \"d3pie-labels-inner-format\" },\n d3PieLabelsInnerHidewhenlessthanpercentage: {\n key: \"d3pie-labels-inner-hidewhenlessthanpercentage\",\n },\n d3PieLabelsMainLabelColor: { key: \"d3pie-labels-mainLabel-color\" },\n d3PieLabelsMainLabelFont: { key: \"d3pie-labels-mainLabel-font\" },\n d3PieLabelsMainLabelFontsize: { key: \"d3pie-labels-mainLabel-fontsize\" },\n d3PieLabelsMainLabelFontweight: { key: \"d3pie-labels-mainLabel-fontweight\" },\n d3PieLabelsPercentageColor: { key: \"d3pie-labels-percentage-color\" },\n d3PieLabelsPercentageFont: { key: \"d3pie-labels-percentage-font\" },\n d3PieLabelsPercentageFontsize: { key: \"d3pie-labels-percentage-fontsize\" },\n d3PieLabelsPercentageFontweight: { key: \"d3pie-labels-percentage-fontweight\" },\n d3PieLabelsValueColor: { key: \"d3pie-labels-value-color\" },\n d3PieLabelsValueFont: { key: \"d3pie-labels-value-font\" },\n d3PieLabelsValueFontsize: { key: \"d3pie-labels-value-fontsize\" },\n d3PieLabelsValueFontweight: { key: \"d3pie-labels-value-fontweight\" },\n d3PieLabelsLinesEnabled: { key: \"d3pie-labels-lines-enabled\", type: \"boolean\" },\n d3PieLabelsLinesStyle: { key: \"d3pie-labels-lines-style\" },\n d3PieLabelsLinesColor: { key: \"d3pie-labels-lines-color\" },\n d3PieLabelsTruncationEnabled: { key: \"d3pie-labels-truncation-enabled\", type: \"boolean\" },\n d3PieLabelsTruncationTruncatelength: { key: \"d3pie-labels-truncation-truncatelength\" },\n d3PieMiscColorsSegmentstroke: { key: \"d3pie-misc-colors-segmentstroke\" },\n d3PieMiscGradientEnabled: { key: \"d3pie-misc-gradient-enabled\", type: \"boolean\" },\n d3PieMiscColorsPercentage: { key: \"d3pie-misc-colors-percentage\" },\n d3PieMiscGradientColor: { key: \"d3pie-misc-gradient-color\" },\n d3PieCssprefix: { key: \"d3pie-cssprefix\" },\n\n peityStrokeWidth: { key: \"peity-strokewidth\" },\n\n textOnlyDecimalPlaces: { key: \"textonly-decimal-places\" },\n textOnlyPrefix: { key: \"textonly-prefix\" },\n textOnlySuffix: { key: \"textonly-suffix\" },\n})\n\nexport const getAttributesStatic = (node: Element): Attributes => mapObjIndexed(\n (attribute: AttributeConfig) => (\n (attribute as BooleanAttributeConfig).type === \"boolean\"\n ? getDataAttributeBoolean(\n node,\n attribute.key,\n attribute.defaultValue as BooleanAttributeConfig[\"defaultValue\"],\n ) : getDataAttribute(node, attribute.key, attribute.defaultValue)\n ),\n getAttributesMap(),\n) as Attributes // need to override because of broken Ramda typings\n\nexport const getAttributesDynamic = (node: Element) => {\n const showValueOfAttribues = Array.from(node.attributes)\n .filter((attribute) => attribute.name.startsWith(\"data-show-value-of\"))\n .map((attribute) => ({\n [attribute.name.replace(\"data-\", \"\")]: attribute.value,\n }))\n const merged = mergeAll(showValueOfAttribues)\n return isEmpty(merged) ? undefined : merged\n}\n\nexport const getAttributes = (node: Element): Attributes => {\n const attributesStatic = getAttributesStatic(node)\n const showValueOf = getAttributesDynamic(node)\n return { ...attributesStatic, showValueOf }\n}\n\nexport const defaultAttributes: Partial<Attributes> = {\n legendPosition: initialLegendRight ? \"right\" : \"bottom\",\n}\n","/* 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 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 { isDemo } from \"./utils/is-demo\"\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from './domains/chart/utils/legend-utils';\nimport { defaultAttributes } from './domains/chart/utils/transformDataAttributes';\n\n// this is temporary, hook will be used after the full main.js refactor\nlet localeDateString, localeTimeString\nexport const updateLocaleFunctions = ({\n localeDateString: newLocaleDateString,\n localeTimeString: newLocaleTimeString,\n}) => {\n localeDateString = newLocaleDateString\n localeTimeString = newLocaleTimeString\n}\n\n// enable alarms checking and notifications\nvar netdataShowAlarms = true;\n\n// enable registry updates\nvar netdataRegistry = true;\n\n// forward definition only - not used here\nvar netdataServer = undefined;\nvar netdataServerStatic = undefined;\nvar netdataCheckXSS = undefined;\n\nlet reduxStore\n\nfunction escapeUserInputHTML(s) {\n return s.toString()\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/#/g, '&#35;')\n .replace(/'/g, '&#39;')\n .replace(/\\(/g, '&#40;')\n .replace(/\\)/g, '&#41;')\n .replace(/\\//g, '&#47;');\n}\n\nconst setOption = (key, value) => {\n reduxStore.dispatch(setOptionAction({\n key,\n value,\n }))\n}\n\n// temporary function that will be removed after full main.js migration to react\nconst getFromRegistry = (prop) => {\n const registry = selectRegistry(reduxStore.getState())\n return registry?.[prop]\n}\n\nfunction verifyURL(s) {\n if (typeof (s) === 'string' && (s.startsWith('http://') || s.startsWith('https://'))) {\n return s\n .replace(/'/g, '%22')\n .replace(/\"/g, '%27')\n .replace(/\\)/g, '%28')\n .replace(/\\(/g, '%29');\n }\n\n console.log('invalid URL detected:');\n console.log(s);\n return 'javascript:alert(\"invalid url\");';\n}\n\n// --------------------------------------------------------------------\n// urlOptions\n\nwindow.urlOptions = {\n hash: '#',\n theme: null,\n help: null,\n mode: 'live', // 'live', 'print'\n update_always: false,\n pan_and_zoom: false,\n server: null,\n after: 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\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 return hash;\n },\n\n parseHash: function () {\n var variables = document.location.hash.split(';');\n var len = variables.length;\n while (len--) {\n if (len !== 0) {\n var p = variables[len].split('=');\n if (urlOptions.hasProperty(p[0]) && typeof p[1] !== 'undefined') {\n urlOptions[p[0]] = decodeURIComponent(p[1]);\n }\n } else {\n if (variables[len].length > 0) {\n urlOptions.hash = variables[len];\n }\n }\n }\n\n var booleans = ['nowelcome', 'show_alarms', 'update_always'];\n len = booleans.length;\n while (len--) {\n if (urlOptions[booleans[len]] === 'true' || urlOptions[booleans[len]] === true || urlOptions[booleans[len]] === '1' || urlOptions[booleans[len]] === 1) {\n urlOptions[booleans[len]] = true;\n } else {\n urlOptions[booleans[len]] = false;\n }\n }\n\n var numeric = ['after', 'before', 'highlight_after', 'highlight_before'];\n len = numeric.length;\n while (len--) {\n if (typeof urlOptions[numeric[len]] === 'string') {\n try {\n urlOptions[numeric[len]] = parseInt(urlOptions[numeric[len]]);\n }\n catch (e) {\n console.log('failed to parse URL hash parameter ' + numeric[len]);\n urlOptions[numeric[len]] = 0;\n }\n }\n }\n\n if (urlOptions.server !== null && urlOptions.server !== '') {\n netdataServerStatic = document.location.origin.toString() + document.location.pathname.toString();\n netdataServer = urlOptions.server;\n netdataCheckXSS = true;\n } else {\n urlOptions.server = null;\n }\n\n if (urlOptions.before > 0 && urlOptions.after > 0) {\n urlOptions.pan_and_zoom = true;\n urlOptions.nowelcome = true;\n } else {\n urlOptions.pan_and_zoom = false;\n }\n\n if (urlOptions.highlight_before > 0 && urlOptions.highlight_after > 0) {\n urlOptions.highlight = true;\n } else {\n urlOptions.highlight = false;\n }\n\n switch (urlOptions.mode) {\n case 'print':\n urlOptions.theme = 'white';\n urlOptions.welcome = false;\n urlOptions.help = false;\n urlOptions.show_alarms = false;\n\n if (urlOptions.pan_and_zoom === false) {\n urlOptions.pan_and_zoom = true;\n urlOptions.before = Date.now();\n urlOptions.after = urlOptions.before - 600000;\n }\n\n netdataShowAlarms = false;\n netdataRegistry = false;\n break;\n\n case 'live':\n default:\n urlOptions.mode = 'live';\n break;\n }\n\n // console.log(urlOptions);\n },\n\n hashUpdate: function () {\n history.replaceState(null, '', urlOptions.genHash(true));\n },\n\n netdataPanAndZoomCallback: function (status, after, before) {\n //console.log(1);\n //console.log(new Error().stack);\n\n if (netdataSnapshotData === null) {\n urlOptions.pan_and_zoom = status;\n urlOptions.after = after;\n urlOptions.before = before;\n urlOptions.hashUpdate();\n }\n },\n\n netdataHighlightCallback: function (status, after, before) {\n if (status === true && (after === null || before === null || after <= 0 || before <= 0 || after >= before)) {\n status = false;\n after = 0;\n before = 0;\n }\n\n if (window.netdataSnapshotData === null) {\n urlOptions.highlight = status;\n } else {\n urlOptions.highlight = false;\n }\n\n urlOptions.highlight_after = Math.round(after);\n urlOptions.highlight_before = Math.round(before);\n urlOptions.hashUpdate();\n\n if (status === true && after > 0 && before > 0 && after < before) {\n var d1 = localeDateString(after);\n var d2 = localeDateString(before);\n if (d1 === d2) {\n d2 = '';\n }\n document.getElementById('navbar-highlight-content').innerHTML =\n '<span class=\"navbar-highlight-bar highlight-tooltip\" onclick=\"urlOptions.showHighlight();\" title=\"restore the highlighted view\" data-toggle=\"tooltip\" data-placement=\"bottom\">'\n + 'highlighted time-frame'\n + ' <b>' + d1 + ' <code>' + localeTimeString(after) + '</code></b> to '\n + ' <b>' + d2 + ' <code>' + localeTimeString(before) + '</code></b>, '\n + 'duration <b>' + seconds4human(Math.round((before - after) / 1000)) + '</b>'\n + '</span>'\n + '<span class=\"navbar-highlight-button-right highlight-tooltip\" onclick=\"urlOptions.clearHighlight();\" title=\"clear the highlighted time-frame\" data-toggle=\"tooltip\" data-placement=\"bottom\"><i class=\"fas fa-times\"></i></span>';\n\n $('.navbar-highlight').show();\n $('.navbar-highlight').width(\"80%\");\n $('.highlight-tooltip').tooltip({\n html: true,\n delay: { show: 500, hide: 0 },\n container: 'body'\n });\n } else {\n $('.navbar-highlight').hide();\n $('.navbar-highlight').width(\"100%\");\n }\n },\n\n clearHighlight: function () {\n reduxStore.dispatch(clearHighlightAction())\n },\n\n showHighlight: function () {\n reduxStore.dispatch(centerAroundHighlightAction())\n }\n};\n\nurlOptions.parseHash();\n\n// --------------------------------------------------------------------\n// check options that should be processed before loading netdata.js\n\nvar localStorageTested = -1;\n\nfunction localStorageTest() {\n if (localStorageTested !== -1) {\n return localStorageTested;\n }\n\n if (typeof Storage !== \"undefined\" && typeof localStorage === 'object') {\n var test = 'test';\n try {\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n localStorageTested = true;\n }\n catch (e) {\n console.log(e);\n localStorageTested = false;\n }\n } else {\n localStorageTested = false;\n }\n\n return localStorageTested;\n}\n\nfunction loadLocalStorage(name) {\n var ret = null;\n\n try {\n if (localStorageTest() === true) {\n ret = localStorage.getItem(name);\n } else {\n console.log('localStorage is not available');\n }\n }\n catch (error) {\n console.log(error);\n return null;\n }\n\n if (typeof ret === 'undefined' || ret === null) {\n return null;\n }\n\n // console.log('loaded: ' + name.toString() + ' = ' + ret.toString());\n\n return ret;\n}\n\nfunction saveLocalStorage(name, value) {\n // console.log('saving: ' + name.toString() + ' = ' + value.toString());\n try {\n if (localStorageTest() === true) {\n localStorage.setItem(name, value.toString());\n return true;\n }\n }\n catch (error) {\n console.log(error);\n }\n\n return false;\n}\n\nfunction getTheme(def) {\n if (urlOptions.mode === 'print') {\n return 'white';\n }\n\n var ret = loadLocalStorage('netdataTheme');\n if (typeof ret === 'undefined' || ret === null || ret === 'undefined') {\n return def;\n } else {\n return ret;\n }\n}\n\nfunction setTheme(theme) {\n if (urlOptions.mode === 'print') {\n return false;\n }\n\n if (theme === netdataTheme) {\n return false;\n }\n return saveLocalStorage('netdataTheme', theme);\n}\n\nwindow.netdataTheme = getTheme('slate');\n// this is of course temporary, will be fixed during complete main.js rewrite\nNETDATA.updateTheme()\nvar netdataShowHelp = true;\n\nif (urlOptions.theme !== null) {\n setTheme(urlOptions.theme);\n netdataTheme = urlOptions.theme;\n window.NETDATA.updateTheme()\n} else {\n urlOptions.theme = netdataTheme;\n}\n\nif (urlOptions.help !== null) {\n saveLocalStorage('options.show_help', urlOptions.help);\n netdataShowHelp = urlOptions.help;\n} else {\n urlOptions.help = loadLocalStorage('options.show_help');\n}\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nfunction naturalSortChunkify(t) {\n var tz = [];\n var x = 0, y = -1, n = 0, i, j;\n\n while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n var m = (i >= 48 && i <= 57);\n if (m !== n) {\n tz[++y] = \"\";\n n = m;\n }\n tz[y] += j;\n }\n\n return tz;\n}\n\nfunction naturalSortCompare(a, b) {\n var aa = naturalSortChunkify(a.toLowerCase());\n var bb = naturalSortChunkify(b.toLowerCase());\n\n for (var x = 0; aa[x] && bb[x]; x++) {\n if (aa[x] !== bb[x]) {\n var c = Number(aa[x]), d = Number(bb[x]);\n if (c.toString() === aa[x] && d.toString() === bb[x]) {\n return c - d;\n } else {\n return (aa[x] > bb[x]) ? 1 : -1;\n }\n }\n }\n\n return aa.length - bb.length;\n}\n\n// --------------------------------------------------------------------\n// saving files to client\n\nfunction saveTextToClient(data, filename) {\n var blob = new Blob([data], {\n type: 'application/octet-stream'\n });\n\n var url = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n\n var el = document.getElementById('hiddenDownloadLinks');\n el.innerHTML = '';\n el.appendChild(link);\n\n setTimeout(function () {\n el.removeChild(link);\n URL.revokeObjectURL(url);\n }, 60);\n\n link.click();\n}\n\nfunction saveObjectToClient(data, filename) {\n saveTextToClient(JSON.stringify(data), filename);\n}\n\nfunction netdataURL(url, forReload) {\n if (typeof url === 'undefined')\n // url = document.location.toString();\n {\n url = '';\n }\n\n if (url.indexOf('#') !== -1) {\n url = url.substring(0, url.indexOf('#'));\n }\n\n var hash = urlOptions.genHash(forReload);\n\n // console.log('netdataURL: ' + url + hash);\n\n return url + hash;\n}\n\nfunction netdataReload(url) {\n document.location = verifyURL(netdataURL(url, true));\n\n // since we play with hash\n // this is needed to reload the page\n location.reload();\n}\n\nwindow.gotoHostedModalHandler = (url) => {\n document.location = verifyURL(url + urlOptions.genHash());\n return false;\n}\n\nvar gotoServerValidateRemaining = 0;\nvar gotoServerMiddleClick = false;\nvar gotoServerStop = false;\n\nfunction gotoServerValidateUrl(id, guid, url) {\n var penalty = 0;\n var error = 'failed';\n\n if (document.location.toString().startsWith('http://') && url.toString().startsWith('https://'))\n // we penalize https only if the current url is http\n // to allow the user walk through all its servers.\n {\n penalty = 500;\n } else if (document.location.toString().startsWith('https://') && url.toString().startsWith('http://')) {\n error = 'can\\'t check';\n }\n\n var finalURL = netdataURL(url);\n\n setTimeout(function () {\n document.getElementById('gotoServerList').innerHTML += '<tr><td style=\"padding-left: 20px;\"><a href=\"' + verifyURL(finalURL) + '\" target=\"_blank\">' + escapeUserInputHTML(url) + '</a></td><td style=\"padding-left: 30px;\"><code id=\"' + guid + '-' + id + '-status\">checking...</code></td></tr>';\n\n NETDATA.registryHello(url, function (data) {\n if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid === guid) {\n // console.log('OK ' + id + ' URL: ' + url);\n document.getElementById(guid + '-' + id + '-status').innerHTML = \"OK\";\n\n if (!gotoServerStop) {\n gotoServerStop = true;\n\n if (gotoServerMiddleClick) {\n window.open(verifyURL(finalURL), '_blank');\n gotoServerMiddleClick = false;\n const registryMachines = getFromRegistry(\"registryMachines\");\n document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + registryMachines[guid].name + '<br/><a href=\"' + verifyURL(finalURL) + '\">' + escapeUserInputHTML(url) + '</a></b><br/>(check your pop-up blocker if it fails)';\n } else {\n document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + escapeUserInputHTML(url) + '</small>';\n document.location = verifyURL(finalURL);\n $('#gotoServerModal').modal('hide');\n }\n }\n } else {\n if (typeof data !== 'undefined' && data !== null && typeof data.machine_guid === 'string' && data.machine_guid !== guid) {\n error = 'wrong machine';\n }\n\n document.getElementById(guid + '-' + id + '-status').innerHTML = error;\n gotoServerValidateRemaining--;\n if (gotoServerValidateRemaining <= 0) {\n gotoServerMiddleClick = false;\n document.getElementById('gotoServerResponse').innerHTML = '<b>Sorry! I cannot find any operational URL for this server</b>';\n }\n }\n });\n }, (id * 50) + penalty);\n}\n\nwindow.gotoServerModalHandler = function gotoServerModalHandler(guid) {\n // console.log('goto server: ' + guid);\n\n gotoServerStop = false;\n var checked = {};\n const registryMachines = getFromRegistry(\"registryMachines\");\n var len = registryMachines[guid].alternateUrls.length;\n var count = 0;\n\n document.getElementById('gotoServerResponse').innerHTML = '';\n document.getElementById('gotoServerList').innerHTML = '';\n document.getElementById('gotoServerName').innerHTML = registryMachines[guid].name;\n $('#gotoServerModal').modal('show');\n\n gotoServerValidateRemaining = len;\n while (len--) {\n var url = registryMachines[guid].alternateUrls[len];\n checked[url] = true;\n gotoServerValidateUrl(count++, guid, url);\n }\n\n // When the registry is enabled, if the user's known URLs are not working\n // we consult the registry to get additional URLs.\n setTimeout(function () {\n if (gotoServerStop === false) {\n document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';\n NETDATA.registrySearch(guid, getFromRegistry, function (data) {\n // console.log(data);\n len = data.urls.length;\n while (len--) {\n var url = data.urls[len][1];\n // console.log(url);\n if (typeof checked[url] === 'undefined') {\n gotoServerValidateRemaining++;\n checked[url] = true;\n gotoServerValidateUrl(count++, guid, url);\n }\n }\n });\n }\n }, 2000);\n\n return false;\n}\n\nwindow.switchRegistryModalHandler = () => {\n document.getElementById('switchRegistryPersonGUID').value = getFromRegistry(\"personGuid\");\n document.getElementById('switchRegistryURL').innerHTML = getFromRegistry(\"registryServer\");\n document.getElementById('switchRegistryResponse').innerHTML = '';\n $('#switchRegistryModal').modal('show');\n};\n\nwindow.notifyForSwitchRegistry = () => {\n // it's just old code, with minimal changes\n const newPersonGuid = document.getElementById('switchRegistryPersonGUID').value;\n\n if (newPersonGuid !== '' && newPersonGuid.length === 36) {\n\n $.ajax({\n url: getFromRegistry(\"registryServer\") + '/api/v1/registry?action=switch&machine='\n + getFromRegistry(\"machineGuid\") + '&name='\n + encodeURIComponent(getFromRegistry(\"hostname\")) + '&url='\n + encodeURIComponent(serverDefault) + '&to=' + newPersonGuid,\n async: true,\n cache: false,\n headers: {\n 'Cache-Control': 'no-cache, no-store',\n 'Pragma': 'no-cache'\n },\n xhrFields: {withCredentials: true} // required for the cookie\n })\n .done(function (data) {\n data = NETDATA.xss.checkAlways('/api/v1/registry?action=switch', data);\n\n if (typeof data.status !== 'string' || data.status !== 'ok') {\n // NETDATA.error(413, NETDATA.registry.server + ' responded with: ' + JSON.stringify(data));\n console.warn(\"Netdata registry server send invalid response to SWITCH\", data)\n data = null;\n }\n\n $('#switchRegistryModal').modal('hide');\n })\n .fail(function () {\n // NETDATA.error(414, NETDATA.registry.server);\n console.warn(\"Netdata registry SWITCH failed\")\n document.getElementById('switchRegistryResponse').innerHTML = \"<b>Sorry! The registry rejected your request.</b>\";\n });\n } else {\n document.getElementById('switchRegistryResponse').innerHTML = \"<b>The ID you have entered is not a GUID.</b>\";\n }\n};\n\nvar deleteRegistryGuid = null;\nvar deleteRegistryUrl = null;\n\nwindow.deleteRegistryModalHandler = (guid, name, url) => {\n deleteRegistryGuid = guid;\n deleteRegistryUrl = url;\n\n document.getElementById('deleteRegistryServerName').innerHTML = name;\n document.getElementById('deleteRegistryServerName2').innerHTML = name;\n document.getElementById('deleteRegistryServerURL').innerHTML = url;\n document.getElementById('deleteRegistryResponse').innerHTML = '';\n\n $('#deleteRegistryModal').modal('show');\n}\n\nwindow.notifyForDeleteRegistry = () => {\n const responseEl = document.getElementById('deleteRegistryResponse');\n\n if (deleteRegistryUrl) {\n NETDATA.registryDelete(getFromRegistry, serverDefault, deleteRegistryUrl, function (result) {\n if (result !== null) {\n deleteRegistryUrl = null;\n $('#deleteRegistryModal').modal('hide');\n reduxStore.dispatch(resetRegistry())\n } else {\n responseEl.innerHTML = \"<b>Sorry, this command was rejected by the registry server!</b>\";\n }\n });\n }\n}\n\nvar options = {\n menus: {},\n submenu_names: {},\n data: null,\n hostname: 'netdata_server', // will be overwritten by the netdata server\n version: 'unknown',\n release_channel: 'unknown',\n hosts: [],\n\n duration: 0, // the default duration of the charts\n update_every: 1,\n\n chartsPerRow: 0,\n // chartsMinWidth: 1450,\n chartsHeight: 180,\n};\n\nfunction chartsPerRow(total) {\n void (total);\n\n if (options.chartsPerRow === 0) {\n return 1;\n //var width = Math.floor(total / options.chartsMinWidth);\n //if(width === 0) width = 1;\n //return width;\n } else {\n return options.chartsPerRow;\n }\n}\n\nfunction prioritySort(a, b) {\n if (a.priority < b.priority) {\n return -1;\n }\n if (a.priority > b.priority) {\n return 1;\n }\n return naturalSortCompare(a.name, b.name);\n}\n\nfunction sortObjectByPriority(object) {\n var idx = {};\n var sorted = [];\n\n for (var i in object) {\n if (!object.hasOwnProperty(i)) {\n continue;\n }\n\n if (typeof idx[i] === 'undefined') {\n idx[i] = object[i];\n sorted.push(i);\n }\n }\n\n sorted.sort(function (a, b) {\n if (idx[a].priority < idx[b].priority) {\n return -1;\n }\n if (idx[a].priority > idx[b].priority) {\n return 1;\n }\n return naturalSortCompare(a, b);\n });\n\n return sorted;\n}\n\n// ----------------------------------------------------------------------------\n// scroll to a section, without changing the browser history\n\nwindow.scrollToId = (hash) => {\n if (hash && hash !== '' && document.getElementById(hash) !== null) {\n var offset = $('#' + hash).offset();\n if (typeof offset !== 'undefined') {\n //console.log('scrolling to ' + hash + ' at ' + offset.top.toString());\n $('html, body').animate({ scrollTop: offset.top - 30 }, 0);\n }\n }\n\n // we must return false to prevent the default action\n return false;\n}\n\n// ----------------------------------------------------------------------------\n\n// user editable information\nwindow.customDashboard = {\n menu: {},\n submenu: {},\n context: {}\n};\n\n// netdata standard information\nconst netdataDashboard = {\n sparklines_registry: {},\n os: 'unknown',\n\n menu: {},\n submenu: {},\n context: {},\n\n // generate a sparkline\n // used in the documentation\n sparkline: function (prefix, chart, dimension, units, suffix) {\n if (options.data === null || typeof options.data.charts === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart] === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart].dimensions === 'undefined') {\n return '';\n }\n\n if (typeof options.data.charts[chart].dimensions[dimension] === 'undefined') {\n return '';\n }\n\n var key = chart + '.' + dimension;\n\n if (typeof units === 'undefined') {\n units = '';\n }\n\n if (typeof this.sparklines_registry[key] === 'undefined') {\n this.sparklines_registry[key] = { count: 1 };\n } else {\n this.sparklines_registry[key].count++;\n }\n\n key = key + '.' + this.sparklines_registry[key].count;\n\n return prefix + '<div class=\"netdata-container\" data-netdata=\"' + chart + '\" data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\" data-dygraph-theme=\"sparkline\" data-dimensions=\"' + dimension + '\" data-show-value-of-' + dimension + '-at=\"' + key + '\"></div> (<span id=\"' + key + '\" style=\"display: inline-block; min-width: 50px; text-align: right;\">X</span>' + units + ')' + suffix;\n },\n\n gaugeChart: function (title, width, dimensions, colors) {\n if (typeof colors === 'undefined') {\n colors = '';\n }\n\n if (typeof dimensions === 'undefined') {\n dimensions = '';\n }\n\n return '<div class=\"netdata-container\" data-netdata=\"CHART_UNIQUE_ID\"'\n + ' data-dimensions=\"' + dimensions + '\"'\n + ' data-chart-library=\"gauge\"'\n + ' data-gauge-adjust=\"width\"'\n + ' data-title=\"' + title + '\"'\n + ' data-width=\"' + width + '\"'\n + ' data-points=\"CHART_DURATION\"'\n + ' data-colors=\"' + colors + '\"'\n + ' role=\"application\"></div>';\n },\n\n anyAttribute: function (obj, attr, key, def) {\n if (typeof (obj[key]) !== 'undefined') {\n var x = obj[key][attr];\n\n if (typeof (x) === 'undefined') {\n return def;\n }\n\n if (typeof (x) === 'function') {\n return x(netdataDashboard.os);\n }\n\n return x;\n }\n\n return def;\n },\n\n menuTitle: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return (this.anyAttribute(this.menu, 'title', chart.menu_pattern, chart.menu_pattern).toString()\n + '&nbsp;' + chart.type.slice(-(chart.type.length - chart.menu_pattern.length - 1)).toString()).replace(/_/g, ' ');\n }\n\n return (this.anyAttribute(this.menu, 'title', chart.menu, chart.menu)).toString().replace(/_/g, ' ');\n },\n\n menuIcon: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'icon', chart.menu_pattern, '<i class=\"fas fa-puzzle-piece\"></i>').toString();\n }\n\n return this.anyAttribute(this.menu, 'icon', chart.menu, '<i class=\"fas fa-puzzle-piece\"></i>');\n },\n\n menuInfo: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'info', chart.menu_pattern, null);\n }\n\n return this.anyAttribute(this.menu, 'info', chart.menu, null);\n },\n\n menuHeight: function (chart) {\n if (typeof chart.menu_pattern !== 'undefined') {\n return this.anyAttribute(this.menu, 'height', chart.menu_pattern, 1.0);\n }\n\n return this.anyAttribute(this.menu, 'height', chart.menu, 1.0);\n },\n\n submenuTitle: function (menu, submenu) {\n var key = menu + '.' + submenu;\n // console.log(key);\n var title = this.anyAttribute(this.submenu, 'title', key, submenu).toString().replace(/_/g, ' ');\n if (title.length > 28) {\n var a = title.substring(0, 13);\n var b = title.substring(title.length - 12, title.length);\n return a + '...' + b;\n }\n return title;\n },\n\n submenuInfo: function (menu, submenu) {\n var key = menu + '.' + submenu;\n return this.anyAttribute(this.submenu, 'info', key, null);\n },\n\n submenuHeight: function (menu, submenu, relative) {\n var key = menu + '.' + submenu;\n return this.anyAttribute(this.submenu, 'height', key, 1.0) * relative;\n },\n\n contextInfo: function (id) {\n var x = this.anyAttribute(this.context, 'info', id, null);\n\n if (x !== null) {\n return '<div class=\"shorten dashboard-context-info netdata-chart-alignment\" role=\"document\">' + x + '</div>';\n } else {\n return '';\n }\n },\n\n contextValueRange: function (id) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].valueRange !== 'undefined') {\n return this.context[id].valueRange;\n } else {\n return '[null, null]';\n }\n },\n\n contextHeight: function (id, def) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].height !== 'undefined') {\n return def * this.context[id].height;\n } else {\n return def;\n }\n },\n\n contextDecimalDigits: function (id, def) {\n if (typeof this.context[id] !== 'undefined' && typeof this.context[id].decimalDigits !== 'undefined') {\n return this.context[id].decimalDigits;\n } else {\n return def;\n }\n }\n};\nwindow.netdataDashboard = netdataDashboard // share with dashboard_info.js :/\n\n// ----------------------------------------------------------------------------\n\n// enrich the data structure returned by netdata\n// to reflect our menu system and content\n// TODO: this is a shame - we should fix charts naming (issue #807)\nfunction enrichChartData(chart) {\n var parts = chart.type.split('_');\n var tmp = parts[0];\n\n switch (tmp) {\n case 'ap':\n case 'net':\n case 'disk':\n case 'powersupply':\n case 'statsd':\n chart.menu = tmp;\n break;\n\n case 'apache':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'cache') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'bind':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'rndc') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'cgroup':\n chart.menu = chart.type;\n if (chart.id.match(/.*[\\._\\/-:]qemu[\\._\\/-:]*/) || chart.id.match(/.*[\\._\\/-:]kvm[\\._\\/-:]*/)) {\n chart.menu_pattern = 'cgqemu';\n } else {\n chart.menu_pattern = 'cgroup';\n }\n break;\n\n case 'go':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'expvar') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'mount':\n if (parts.length > 2) {\n chart.menu = tmp + '_' + parts[1];\n }\n else {\n chart.menu = tmp;\n }\n break;\n\n case 'isc':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'dhcpd') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'ovpn':\n chart.menu = chart.type;\n if (parts.length > 3 && parts[1] === 'status' && parts[2] === 'log') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case 'smartd':\n case 'web':\n chart.menu = chart.type;\n if (parts.length > 2 && parts[1] === 'log') {\n chart.menu_pattern = tmp + '_' + parts[1];\n } else if (parts.length > 1) {\n chart.menu_pattern = tmp;\n }\n break;\n\n case '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;\n options.update_every = data.update_every;\n\n var html = '';\n var sidebar = '<ul class=\"nav dashboard-sidenav\" data-spy=\"affix\" id=\"sidebar_ul\">';\n var mainhead = headMain(netdataDashboard.os, data.charts, duration);\n\n // sort the menus\n var main = sortObjectByPriority(menus);\n var i = 0, len = main.length;\n\n // todo hook to options\n const hasChartsOnBottom = defaultAttributes.legendPosition === \"bottom\"\n const chartAdditionalHeight = hasChartsOnBottom ? LEGEND_BOTTOM_SINGLE_LINE_HEIGHT : 0\n while (i < len) {\n var menu = main[i++];\n\n // generate an entry at the main menu\n\n var menuid = NETDATA.name2id('menu_' + menu);\n sidebar += '<li class=\"\"><a href=\"#' + menuid + '\" onClick=\"return scrollToId(\\'' + menuid + '\\');\">' + menus[menu].icon + ' ' + menus[menu].title + '</a><ul class=\"nav\">';\n html += '<div role=\"section\" class=\"dashboard-section\"><div role=\"sectionhead\"><h1 id=\"' + menuid + '\" role=\"heading\">' + menus[menu].icon + ' ' + menus[menu].title + '</h1></div><div role=\"section\" class=\"dashboard-subsection\">';\n\n if (menus[menu].info !== null) {\n html += menus[menu].info;\n }\n\n // console.log(' >> ' + menu + ' (' + menus[menu].priority + '): ' + menus[menu].title);\n\n var shtml = '';\n var mhead = '<div class=\"netdata-chart-row\">' + mainhead;\n mainhead = '';\n\n // sort the submenus of this menu\n var sub = sortObjectByPriority(menus[menu].submenus);\n var si = 0, slen = sub.length;\n while (si < slen) {\n var submenu = sub[si++];\n\n // generate an entry at the submenu\n var submenuid = NETDATA.name2id('menu_' + menu + '_submenu_' + submenu);\n sidebar += '<li class><a href=\"#' + submenuid + '\" onClick=\"return scrollToId(\\'' + submenuid + '\\');\">' + menus[menu].submenus[submenu].title + '</a></li>';\n shtml += '<div role=\"section\" class=\"dashboard-section-container\" id=\"' + submenuid + '\"><h2 id=\"' + submenuid + '\" class=\"netdata-chart-alignment\" role=\"heading\">' + menus[menu].submenus[submenu].title + '</h2>';\n\n if (menus[menu].submenus[submenu].info !== null) {\n shtml += '<div class=\"dashboard-submenu-info netdata-chart-alignment\" role=\"document\">' + menus[menu].submenus[submenu].info + '</div>';\n }\n\n var head = '<div class=\"netdata-chart-row\">';\n var chtml = '';\n\n // console.log(' \\------- ' + submenu + ' (' + menus[menu].submenus[submenu].priority + '): ' + menus[menu].submenus[submenu].title);\n\n // sort the charts in this submenu of this menu\n menus[menu].submenus[submenu].charts.sort(prioritySort);\n var ci = 0, clen = menus[menu].submenus[submenu].charts.length;\n while (ci < clen) {\n var chart = menus[menu].submenus[submenu].charts[ci++];\n\n // generate the submenu heading charts\n mhead += generateHeadCharts('mainheads', chart, duration);\n head += generateHeadCharts('heads', chart, duration);\n\n function chartCommonMin(family, context, units) {\n var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMin', context, undefined);\n if (typeof x !== 'undefined') {\n return ' data-common-min=\"' + family + '/' + context + '/' + units + '\"';\n } else {\n return '';\n }\n }\n\n function chartCommonMax(family, context, units) {\n var x = netdataDashboard.anyAttribute(netdataDashboard.context, 'commonMax', context, undefined);\n if (typeof x !== 'undefined') {\n return ' data-common-max=\"' + family + '/' + context + '/' + units + '\"';\n } else {\n return '';\n }\n }\n\n // generate the chart\n if (urlOptions.mode === 'print') {\n chtml += '<div role=\"row\" class=\"dashboard-print-row\">';\n }\n\n const chartHeight = netdataDashboard.contextHeight(chart.context, options.chartsHeight)\n + chartAdditionalHeight;\n\n chtml += '<div class=\"netdata-chartblock-container\" style=\"width: ' + pcent_width.toString() + '%;\">' + netdataDashboard.contextInfo(chart.context) + '<div class=\"netdata-container\" id=\"chart_' + NETDATA.name2id(chart.id) + '\" data-netdata=\"' + chart.id + '\"'\n + ' data-width=\"100%\"'\n + ' data-height=\"' + chartHeight.toString() + 'px\"'\n + ' data-dygraph-valuerange=\"' + netdataDashboard.contextValueRange(chart.context) + '\"'\n + ' data-id=\"' + NETDATA.name2id(options.hostname + '/' + chart.id) + '\"'\n + ' data-colors=\"' + netdataDashboard.anyAttribute(netdataDashboard.context, 'colors', chart.context, '') + '\"'\n + ' data-decimal-digits=\"' + netdataDashboard.contextDecimalDigits(chart.context, -1) + '\"'\n + (hasChartsOnBottom ? ' data-legend-position=\"bottom\"' : '')\n + chartCommonMin(chart.family, chart.context, chart.units)\n + chartCommonMax(chart.family, chart.context, chart.units)\n + ' role=\"application\"></div></div>';\n\n if (urlOptions.mode === 'print') {\n chtml += '</div>';\n }\n }\n\n head += '</div>';\n shtml += head + chtml + '</div>';\n }\n\n mhead += '</div>';\n sidebar += '</ul></li>';\n html += mhead + shtml + '</div></div><hr role=\"separator\"/>';\n }\n\n const isMemoryModeDbEngine = data.memory_mode === \"dbengine\";\n\n sidebar += '<li class=\"\" style=\"padding-top:15px;\"><a href=\"https://learn.netdata.cloud/docs/agent/collectors/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more charts</a></li>';\n sidebar += '<li class=\"\"><a href=\"https://learn.netdata.cloud/docs/agent/health/quickstart/\" target=\"_blank\"><i class=\"fas fa-plus\"></i> Add more alarms</a></li>';\n sidebar += '<li class=\"\" style=\"margin:20px;color:#666;\"><small>Every ' +\n ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ', ' +\n 'Netdata collects <strong>' + data.dimensions_count.toLocaleString() + '</strong> metrics on ' +\n data.hostname.toString() + ', presents them in <strong>' +\n data.charts_count.toLocaleString() + '</strong> charts' +\n (isMemoryModeDbEngine ? '' : ',') + // oxford comma\n ' and monitors them with <strong>' +\n data.alarms_count.toLocaleString() + '</strong> alarms.';\n\n if (!isMemoryModeDbEngine) {\n sidebar += '<br />&nbsp;<br />Get more history by ' +\n '<a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage#using-the-round-robin-database\" target=_blank>configuring Netdata\\'s <strong>history</strong></a> or switching to the <a href=\"https://learn.netdata.cloud/docs/agent/database/engine\" target=_blank>database engine.</a>';\n }\n\n sidebar += '<br/>&nbsp;<br/><strong>netdata</strong><br/>' + data.version.toString() + '</small>';\n\n sidebar += '</li>'\n\n sidebar += '<li id=\"sidebar-end-portal-container\"></li>'\n\n\n sidebar += '</ul>';\n div.innerHTML = html;\n document.getElementById('sidebar').innerHTML = sidebar;\n\n if (urlOptions.highlight === true) {\n reduxStore.dispatch(setGlobalChartUnderlayAction({\n after: urlOptions.highlight_after,\n before: urlOptions.highlight_before,\n }))\n }\n\n if (urlOptions.mode === 'print') {\n printPage();\n } else {\n finalizePage();\n }\n}\n\nfunction renderChartsAndMenu(data) {\n options.menus = {};\n options.submenu_names = {};\n\n var menus = options.menus;\n var charts = data.charts;\n var m, menu_key;\n\n for (var c in charts) {\n if (!charts.hasOwnProperty(c)) {\n continue;\n }\n\n var chart = charts[c];\n enrichChartData(chart);\n m = chart.menu;\n\n // create the menu\n if (typeof menus[m] === 'undefined') {\n menus[m] = {\n menu_pattern: chart.menu_pattern,\n priority: chart.priority,\n submenus: {},\n title: netdataDashboard.menuTitle(chart),\n icon: netdataDashboard.menuIcon(chart),\n info: netdataDashboard.menuInfo(chart),\n height: netdataDashboard.menuHeight(chart) * options.chartsHeight\n };\n } else {\n if (typeof (menus[m].menu_pattern) === 'undefined') {\n menus[m].menu_pattern = chart.menu_pattern;\n }\n\n if (chart.priority < menus[m].priority) {\n menus[m].priority = chart.priority;\n }\n }\n\n menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n\n // create the submenu\n if (typeof menus[m].submenus[chart.submenu] === 'undefined') {\n menus[m].submenus[chart.submenu] = {\n priority: chart.priority,\n charts: [],\n title: null,\n info: netdataDashboard.submenuInfo(menu_key, chart.submenu),\n height: netdataDashboard.submenuHeight(menu_key, chart.submenu, menus[m].height)\n };\n } else {\n if (chart.priority < menus[m].submenus[chart.submenu].priority) {\n menus[m].submenus[chart.submenu].priority = chart.priority;\n }\n }\n\n // index the chart in the menu/submenu\n menus[m].submenus[chart.submenu].charts.push(chart);\n }\n\n // propagate the descriptive subname given to QoS\n // to all the other submenus with the same name\n for (var m in menus) {\n if (!menus.hasOwnProperty(m)) {\n continue;\n }\n\n for (var s in menus[m].submenus) {\n if (!menus[m].submenus.hasOwnProperty(s)) {\n continue;\n }\n\n // set the family using a name\n if (typeof options.submenu_names[s] !== 'undefined') {\n menus[m].submenus[s].title = s + ' (' + options.submenu_names[s] + ')';\n } else {\n menu_key = (typeof (menus[m].menu_pattern) !== 'undefined') ? menus[m].menu_pattern : m;\n menus[m].submenus[s].title = netdataDashboard.submenuTitle(menu_key, s);\n }\n }\n }\n\n renderPage(menus, data);\n}\n\n// ----------------------------------------------------------------------------\n\nexport const handleLoadJs = (promise, library, callback) => promise\n .catch((e) => {\n console.warn('error', e);\n alert(`Cannot load required JS library: ${library}`)\n })\n .then(() => {\n callback()\n })\n\n\nfunction loadClipboard(callback) {\n handleLoadJs(\n import(\"clipboard-polyfill\").then((clipboard) => {\n window.clipboard = clipboard\n }),\n \"clipboard-polyfill\",\n callback,\n )\n}\n\nfunction loadBootstrapTable(callback) {\n handleLoadJs(\n Promise.all([\n import(\"bootstrap-table\").then(() => (\n import('bootstrap-table/dist/extensions/export/bootstrap-table-export.min')\n )),\n import(\"tableexport.jquery.plugin\")\n ]),\n \"bootstrap-table\",\n callback,\n )\n}\n\nfunction loadBootstrapSlider(callback) {\n handleLoadJs(\n Promise.all([\n import(\"bootstrap-slider\").then(({ default: slider }) => {\n window.Slider = slider\n }),\n import(\"bootstrap-slider/dist/css/bootstrap-slider.min.css\"),\n ]),\n \"bootstrap-slider\",\n callback,\n )\n}\n\nfunction loadLzString(callback) {\n handleLoadJs(import(\"lz-string\"), \"lz-string\", callback)\n}\n\nfunction loadPako(callback) {\n handleLoadJs(\n import(\"pako\").then(({ default: pako }) => {\n window.pako = pako\n }),\n \"pako\",\n callback,\n )\n}\n\n// ----------------------------------------------------------------------------\n\nwindow.clipboardCopy = text => {\n clipboard.writeText(text);\n};\n\nwindow.clipboardCopyBadgeEmbed = url => {\n clipboard.writeText('<embed src=\"' + url + '\" type=\"image/svg+xml\" height=\"20\"/>');\n};\n\n// ----------------------------------------------------------------------------\n\nfunction alarmsUpdateModal() {\n var active = '<h3>Raised Alarms</h3><table class=\"table\">';\n var all = '<h3>All Running Alarms</h3><div class=\"panel-group\" id=\"alarms_all_accordion\" role=\"tablist\" aria-multiselectable=\"true\">';\n var footer = '<hr/><a href=\"https://github.com/netdata/netdata/tree/master/web/api/badges#netdata-badges\" target=\"_blank\">netdata badges</a> refresh automatically. Their color indicates the state of the alarm: <span style=\"color: #e05d44\"><b>&nbsp;red&nbsp;</b></span> is critical, <span style=\"color:#fe7d37\"><b>&nbsp;orange&nbsp;</b></span> is warning, <span style=\"color: #4c1\"><b>&nbsp;bright green&nbsp;</b></span> is ok, <span style=\"color: #9f9f9f\"><b>&nbsp;light grey&nbsp;</b></span> is undefined (i.e. no data or no status), <span style=\"color: #000\"><b>&nbsp;black&nbsp;</b></span> is not initialized. You can copy and paste their URLs to embed them in any web page.<br/>netdata can send notifications for these alarms. Check <a href=\"https://github.com/netdata/netdata/blob/master/health/notifications/health_alarm_notify.conf\" target=\"_blank\">this configuration file</a> for more information.';\n\n loadClipboard(function () {\n });\n\n\n const callback = (data) => {\n options.alarm_families = [];\n\n if (data === null) {\n document.getElementById('alarms_active').innerHTML =\n document.getElementById('alarms_all').innerHTML =\n document.getElementById('alarms_log').innerHTML =\n 'failed to load alarm data!';\n return;\n }\n\n function alarmid4human(id) {\n if (id === 0) {\n return '-';\n }\n\n return id.toString();\n }\n\n function timestamp4human(timestamp, space) {\n if (timestamp === 0) {\n return '-';\n }\n\n if (typeof space === 'undefined') {\n space = '&nbsp;';\n }\n\n var t = new Date(timestamp * 1000);\n\n // commented out to always have date+time, to have consistent exports\n // var now = new Date();\n\n // if (t.toDateString() === now.toDateString()) {\n // return t.toLocaleTimeString();\n // }\n\n return t.toLocaleDateString() + space + t.toLocaleTimeString();\n }\n\n function alarm_lookup_explain(alarm, chart) {\n var dimensions = ' of all values ';\n\n if (chart.dimensions.length > 1) {\n dimensions = ' of the sum of all dimensions ';\n }\n\n if (typeof alarm.lookup_dimensions !== 'undefined') {\n var d = alarm.lookup_dimensions.replace(/|/g, ',');\n var x = d.split(',');\n if (x.length > 1) {\n dimensions = 'of the sum of dimensions <code>' + alarm.lookup_dimensions + '</code> ';\n } else {\n dimensions = 'of all values of dimension <code>' + alarm.lookup_dimensions + '</code> ';\n }\n }\n\n return '<code>' + alarm.lookup_method + '</code> '\n + dimensions + ', of chart <code>' + alarm.chart + '</code>'\n + ', starting <code>' + seconds4human(alarm.lookup_after + alarm.lookup_before, { space: '&nbsp;' }) + '</code> and up to <code>' + seconds4human(alarm.lookup_before, { space: '&nbsp;' }) + '</code>'\n + ((alarm.lookup_options) ? (', with options <code>' + alarm.lookup_options.replace(/ /g, ',&nbsp;') + '</code>') : '')\n + '.';\n }\n\n function alarm_to_html(alarm, full) {\n var chart = options.data.charts[alarm.chart];\n if (typeof (chart) === 'undefined') {\n chart = options.data.charts_by_name[alarm.chart];\n if (typeof (chart) === 'undefined') {\n // this means the charts loaded are incomplete\n // probably netdata was restarted and more alarms\n // are now available.\n console.log('Cannot find chart ' + alarm.chart + ', you probably need to refresh the page.');\n return '';\n }\n }\n\n var has_alarm = (typeof alarm.warn !== 'undefined' || typeof alarm.crit !== 'undefined');\n var badge_url = `${serverDefault}/api/v1/badge.svg?chart=${alarm.chart}&alarm=${alarm.name}&refresh=auto`;\n\n var action_buttons = '<br/>&nbsp;<br/>role: <b>' + alarm.recipient + '</b><br/>&nbsp;<br/>'\n + '<div class=\"action-button ripple\" title=\"click to scroll the dashboard to the chart of this alarm\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"scrollToChartAfterHidingModal(\\'' + alarm.chart + '\\', ' + alarm.last_status_change * 1000 + ', \\'' + alarm.status + '\\'); $(\\'#alarmsModal\\').modal(\\'hide\\'); return false;\"><i class=\"fab fa-periscope\"></i></div>'\n + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard the URL of this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopy(\\'' + badge_url + '\\'); return false;\"><i class=\"far fa-copy\"></i></div>'\n + '<div class=\"action-button ripple\" title=\"click to copy to the clipboard an auto-refreshing <code>embed</code> html element for this badge\" data-toggle=\"tooltip\" data-placement=\"bottom\" onClick=\"clipboardCopyBadgeEmbed(\\'' + badge_url + '\\'); return false;\"><i class=\"fas fa-copy\"></i></div>';\n\n var html = '<tr><td class=\"text-center\" style=\"vertical-align: middle; word-break: break-word;\" width=\"40%\"><b>' + alarm.chart + '</b><br/>&nbsp;<br/><embed src=\"' + badge_url + '\" type=\"image/svg+xml\" height=\"20\"/><br/>&nbsp;<br/><span style=\"font-size: 18px;\">' + alarm.info + '</span>' + action_buttons + '</td>'\n + '<td><table class=\"table\">'\n + ((typeof alarm.warn !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">warning&nbsp;when</td><td><span style=\"font-family: monospace; color:#fe7d37; font-weight: bold;\">' + alarm.warn + '</span></td></tr>') : '')\n + ((typeof alarm.crit !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">critical&nbsp;when</td><td><span style=\"font-family: monospace; color: #e05d44; font-weight: bold;\">' + alarm.crit + '</span></td></tr>') : '');\n\n if (full === true) {\n var units = chart.units;\n if (units === '%') {\n units = '&#37;';\n }\n\n html += ((typeof alarm.lookup_after !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">db&nbsp;lookup</td><td>' + alarm_lookup_explain(alarm, chart) + '</td></tr>') : '')\n + ((typeof alarm.calc !== 'undefined') ? ('<tr><td width=\"10%\" style=\"text-align:right\">calculation</td><td><span style=\"font-family: monospace;\">' + alarm.calc + '</span></td></tr>') : '')\n + ((chart.green !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">green&nbsp;threshold</td><td><code>' + chart.green + ' ' + units + '</code></td></tr>') : '')\n + ((chart.red !== null) ? ('<tr><td width=\"10%\" style=\"text-align:right\">red&nbsp;threshold</td><td><code>' + chart.red + ' ' + units + '</code></td></tr>') : '');\n }\n\n if (alarm.warn_repeat_every > 0) {\n html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;warning</td><td>' + seconds4human(alarm.warn_repeat_every) + '</td></tr>';\n }\n\n if (alarm.crit_repeat_every > 0) {\n html += '<tr><td width=\"10%\" style=\"text-align:right\">repeat&nbsp;critical</td><td>' + seconds4human(alarm.crit_repeat_every) + '</td></tr>';\n }\n\n var delay = '';\n if ((alarm.delay_up_duration > 0 || alarm.delay_down_duration > 0) && alarm.delay_multiplier !== 0 && alarm.delay_max_duration > 0) {\n if (alarm.delay_up_duration === alarm.delay_down_duration) {\n delay += '<small><br/>hysteresis ' + seconds4human(alarm.delay_up_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n });\n } else {\n delay = '<small><br/>hysteresis ';\n if (alarm.delay_up_duration > 0) {\n delay += 'on&nbsp;escalation&nbsp;<code>' + seconds4human(alarm.delay_up_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>, ';\n }\n if (alarm.delay_down_duration > 0) {\n delay += 'on&nbsp;recovery&nbsp;<code>' + seconds4human(alarm.delay_down_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>, ';\n }\n }\n if (alarm.delay_multiplier !== 1.0) {\n delay += 'multiplied&nbsp;by&nbsp;<code>' + alarm.delay_multiplier.toString() + '</code>';\n delay += ',&nbsp;up&nbsp;to&nbsp;<code>' + seconds4human(alarm.delay_max_duration, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</code>';\n }\n delay += '</small>';\n }\n\n html += '<tr><td width=\"10%\" style=\"text-align:right\">check&nbsp;every</td><td>' + seconds4human(alarm.update_every, {\n space: '&nbsp;',\n negative_suffix: ''\n }) + '</td></tr>'\n + ((has_alarm === true) ? ('<tr><td width=\"10%\" style=\"text-align:right\">execute</td><td><span style=\"font-family: monospace;\">' + alarm.exec + '</span>' + delay + '</td></tr>') : '')\n + '<tr><td width=\"10%\" style=\"text-align:right\">source</td><td><span style=\"font-family: monospace; word-break: break-word;\">' + alarm.source + '</span></td></tr>'\n + '</table></td></tr>';\n\n return html;\n }\n\n function alarm_family_show(id) {\n var html = '<table class=\"table\">';\n var family = options.alarm_families[id];\n var len = family.arr.length;\n while (len--) {\n var alarm = family.arr[len];\n html += alarm_to_html(alarm, true);\n }\n html += '</table>';\n\n $('#alarm_all_' + id.toString()).html(html);\n enableTooltipsAndPopovers();\n }\n\n // find the proper family of each alarm\n var x, family, alarm;\n var count_active = 0;\n var count_all = 0;\n var families = {};\n var families_sort = [];\n for (x in data.alarms) {\n if (!data.alarms.hasOwnProperty(x)) {\n continue;\n }\n\n alarm = data.alarms[x];\n family = alarm.family;\n\n // find the chart\n var chart = options.data.charts[alarm.chart];\n if (typeof chart === 'undefined') {\n chart = options.data.charts_by_name[alarm.chart];\n }\n\n // not found - this should never happen!\n if (typeof chart === 'undefined') {\n console.log('WARNING: alarm ' + x + ' is linked to chart ' + alarm.chart + ', which is not found in the list of chart got from the server.');\n chart = { priority: 9999999 };\n }\n else if (typeof chart.menu !== 'undefined' && typeof chart.submenu !== 'undefined')\n // the family based on the chart\n {\n family = chart.menu + ' - ' + chart.submenu;\n }\n\n if (typeof families[family] === 'undefined') {\n families[family] = {\n name: family,\n arr: [],\n priority: chart.priority\n };\n\n families_sort.push(families[family]);\n }\n\n if (chart.priority < families[family].priority) {\n families[family].priority = chart.priority;\n }\n\n families[family].arr.unshift(alarm);\n }\n\n // sort the families, like the dashboard menu does\n var families_sorted = families_sort.sort(function (a, b) {\n if (a.priority < b.priority) {\n return -1;\n }\n if (a.priority > b.priority) {\n return 1;\n }\n return naturalSortCompare(a.name, b.name);\n });\n\n var i = 0;\n var fc = 0;\n var len = families_sorted.length;\n while (len--) {\n family = families_sorted[i++].name;\n var active_family_added = false;\n\n var expanded = 'false';\n var collapsed = 'class=\"collapsed\"';\n var cin = '';\n\n // uncomment if first family needs to be expanded by default\n // var expanded = 'true';\n // var collapsed = '';\n // var cin = 'in';\n\n if (fc !== 0) {\n all += \"</table></div></div></div>\";\n\n // uncomment if first family needs to be expanded by default\n // expanded = 'false';\n // collapsed = 'class=\"collapsed\"';\n // cin = '';\n }\n\n all += '<div class=\"panel panel-default\"><div class=\"panel-heading\" role=\"tab\" id=\"alarm_all_heading_' + fc.toString() + '\"><h4 class=\"panel-title\"><a ' + collapsed + ' role=\"button\" data-toggle=\"collapse\" data-parent=\"#alarms_all_accordion\" href=\"#alarm_all_' + fc.toString() + '\" aria-expanded=\"' + expanded + '\" aria-controls=\"alarm_all_' + fc.toString() + '\">' + family.toString() + '</a></h4></div><div id=\"alarm_all_' + fc.toString() + '\" class=\"panel-collapse collapse ' + cin + '\" role=\"tabpanel\" aria-labelledby=\"alarm_all_heading_' + fc.toString() + '\" data-alarm-id=\"' + fc.toString() + '\"><div class=\"panel-body\" id=\"alarm_all_body_' + fc.toString() + '\">';\n\n options.alarm_families[fc] = families[family];\n\n fc++;\n\n var arr = families[family].arr;\n var c = arr.length;\n while (c--) {\n alarm = arr[c];\n if (alarm.status === 'WARNING' || alarm.status === 'CRITICAL') {\n if (!active_family_added) {\n active_family_added = true;\n active += '<tr><th class=\"text-center\" colspan=\"2\"><h4>' + family + '</h4></th></tr>';\n }\n count_active++;\n active += alarm_to_html(alarm, true);\n }\n\n count_all++;\n }\n }\n active += \"</table>\";\n if (families_sorted.length > 0) {\n all += \"</div></div></div>\";\n }\n all += \"</div>\";\n\n if (!count_active) {\n active += '<div style=\"width:100%; height: 100px; text-align: center;\"><span style=\"font-size: 50px;\"><i class=\"fas fa-thumbs-up\"></i></span><br/>Everything is normal. No raised alarms.</div>';\n } else {\n active += footer;\n }\n\n if (!count_all) {\n all += \"<h4>No alarms are running in this system.</h4>\";\n } else {\n all += footer;\n }\n\n document.getElementById('alarms_active').innerHTML = active;\n document.getElementById('alarms_all').innerHTML = all;\n enableTooltipsAndPopovers();\n\n if (families_sorted.length > 0) {\n alarm_family_show(0);\n }\n\n // register bootstrap events\n var $accordion = $('#alarms_all_accordion');\n $accordion.on('show.bs.collapse', function (d) {\n var target = $(d.target);\n var id = $(target).data('alarm-id');\n alarm_family_show(id);\n });\n $accordion.on('hidden.bs.collapse', function (d) {\n var target = $(d.target);\n var id = $(target).data('alarm-id');\n $('#alarm_all_' + id.toString()).html('');\n });\n\n document.getElementById('alarms_log').innerHTML = '<h3>Alarm Log</h3><table id=\"alarms_log_table\"></table>';\n\n loadBootstrapTable(function () {\n $('#alarms_log_table').bootstrapTable({\n url: `${serverDefault}/api/v1/alarm_log?all`,\n cache: false,\n pagination: true,\n pageSize: 10,\n showPaginationSwitch: false,\n search: true,\n searchTimeOut: 300,\n searchAlign: 'left',\n showColumns: true,\n showExport: true,\n exportDataType: 'all',\n exportOptions: {\n fileName: 'netdata_alarm_log'\n },\n onClickRow: function (row) {\n scrollToChartAfterHidingModal(row.chart, row.when * 1000, row.status);\n $('#alarmsModal').modal('hide');\n return false;\n },\n rowStyle: function (row) {\n switch (row.status) {\n case 'CRITICAL':\n return { classes: 'danger' };\n break;\n case 'WARNING':\n return { classes: 'warning' };\n break;\n case 'UNDEFINED':\n return { classes: 'info' };\n break;\n case 'CLEAR':\n return { classes: 'success' };\n break;\n }\n return {};\n },\n showFooter: false,\n showHeader: true,\n showRefresh: true,\n showToggle: false,\n sortable: true,\n silentSort: false,\n columns: [\n {\n field: 'when',\n title: 'Event Date',\n valign: 'middle',\n titleTooltip: 'The date and time the even took place',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n switchable: false,\n sortable: true\n },\n {\n field: 'hostname',\n title: 'Host',\n valign: 'middle',\n titleTooltip: 'The host that generated this event',\n align: 'center',\n visible: false,\n sortable: true\n },\n {\n field: 'unique_id',\n title: 'Unique ID',\n titleTooltip: 'The host unique ID for this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'alarm_id',\n title: 'Alarm ID',\n titleTooltip: 'The ID of the alarm that generated this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'alarm_event_id',\n title: 'Alarm Event ID',\n titleTooltip: 'The incremental ID of this event for the given alarm',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'chart',\n title: 'Chart',\n titleTooltip: 'The chart the alarm is attached to',\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'family',\n title: 'Family',\n titleTooltip: 'The family of the chart the alarm is attached to',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'name',\n title: 'Alarm',\n titleTooltip: 'The alarm name that generated this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return value.toString().replace(/_/g, ' ');\n },\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'value_string',\n title: 'Friendly Value',\n titleTooltip: 'The value of the alarm, that triggered this event',\n align: 'right',\n valign: 'middle',\n sortable: true\n },\n {\n field: 'old_value_string',\n title: 'Friendly Old Value',\n titleTooltip: 'The value of the alarm, just before this event',\n align: 'right',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'old_value',\n title: 'Old Value',\n titleTooltip: 'The value of the alarm, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'value',\n title: 'Value',\n titleTooltip: 'The value of the alarm, that triggered this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return ((value !== null) ? Math.round(value * 100) / 100 : 'NaN').toString();\n },\n align: 'right',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'units',\n title: 'Units',\n titleTooltip: 'The units of the value of the alarm',\n align: 'left',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'old_status',\n title: 'Old Status',\n titleTooltip: 'The status of the alarm, just before this event',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'status',\n title: 'Status',\n titleTooltip: 'The status of the alarm, that was set due to this event',\n align: 'center',\n valign: 'middle',\n switchable: false,\n sortable: true\n },\n {\n field: 'duration',\n title: 'Last Duration',\n titleTooltip: 'The duration the alarm was at its previous state, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'non_clear_duration',\n title: 'Raised Duration',\n titleTooltip: 'The duration the alarm was raised, just before this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'recipient',\n title: 'Recipient',\n titleTooltip: 'The recipient of this event',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'processed',\n title: 'Processed Status',\n titleTooltip: 'True when this event is processed',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === true) {\n return 'DONE';\n } else {\n return 'PENDING';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updated',\n title: 'Updated Status',\n titleTooltip: 'True when this event has been updated by another event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === true) {\n return 'UPDATED';\n } else {\n return 'CURRENT';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updated_by_id',\n title: 'Updated By ID',\n titleTooltip: 'The unique ID of the event that obsoleted this one',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'updates_id',\n title: 'Updates ID',\n titleTooltip: 'The unique ID of the event obsoleted because of this event',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return alarmid4human(value);\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec',\n title: 'Script',\n titleTooltip: 'The script to handle the event notification',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec_run',\n title: 'Script Run At',\n titleTooltip: 'The date and time the script has been ran',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'exec_code',\n title: 'Script Return Value',\n titleTooltip: 'The return code of the script',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n if (value === 0) {\n return 'OK (returned 0)';\n } else {\n return 'FAILED (with code ' + value.toString() + ')';\n }\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'delay',\n title: 'Script Delay',\n titleTooltip: 'The hysteresis of the notification',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n\n return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'delay_up_to_timestamp',\n title: 'Script Delay Run At',\n titleTooltip: 'The date and time the script should be run, after hysteresis',\n formatter: function (value, row, index) {\n void (row);\n void (index);\n return timestamp4human(value, ' ');\n },\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'info',\n title: 'Description',\n titleTooltip: 'A short description of the alarm',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n },\n {\n field: 'source',\n title: 'Alarm Source',\n titleTooltip: 'The source of configuration of the alarm',\n align: 'center',\n valign: 'middle',\n visible: false,\n sortable: true\n }\n ]\n });\n // console.log($('#alarms_log_table').bootstrapTable('getOptions'));\n });\n }\n\n reduxStore.dispatch(fetchAllAlarmsAction.request({\n callback,\n serverDefault,\n }))\n}\n\nfunction initializeDynamicDashboardWithData(data) {\n if (data !== null) {\n options.hostname = data.hostname;\n options.data = data;\n options.version = data.version;\n options.release_channel = data.release_channel;\n options.timezone = data.timezone;\n netdataDashboard.os = data.os;\n\n if (typeof data.hosts !== 'undefined') {\n options.hosts = data.hosts;\n }\n\n // update the dashboard hostname\n document.getElementById('netdataVersion').innerHTML = options.version;\n\n // update the dashboard title\n document.title = options.hostname + ' netdata dashboard';\n\n // create a chart_by_name index\n data.charts_by_name = {};\n var charts = data.charts;\n var x;\n for (x in charts) {\n if (!charts.hasOwnProperty(x)) {\n continue;\n }\n\n var chart = charts[x];\n data.charts_by_name[chart.name] = chart;\n }\n\n // render all charts\n renderChartsAndMenu(data);\n }\n}\n\n// an object to keep initilization configuration\n// needed due to the async nature of the XSS modal\nvar initializeConfig = {\n url: null,\n custom_info: true,\n};\n\n// will be removed when we'll transform dashboard_info.js into DSL\n// memoize so it's fetched only once\nconst loadDashboardInfo = memoizeWith(identity, () => (\n $.ajax({\n url: `${serverDefault}dashboard_info.js`,\n cache: true,\n dataType: 'script',\n xhrFields: { withCredentials: true }, // required for the cookie\n })\n .fail(function () {\n alert(`Cannot load required JS library: dashboard_info.js`);\n })\n))\n\nfunction loadCustomDashboardInfo(url, callback) {\n $.ajax({\n url,\n cache: true,\n dataType: \"script\",\n xhrFields: { withCredentials: true } // required for the cookie\n })\n .fail(function () {\n alert(`Cannot load required JS library: ${url}`);\n })\n .always(function () {\n $.extend(true, netdataDashboard, customDashboard);\n callback();\n })\n}\n\nfunction initializeChartsAndCustomInfo() {\n loadDashboardInfo().then(() => {\n // download all the charts the server knows\n NETDATA.chartRegistry.downloadAll(initializeConfig.url, function (data) {\n if (data !== null) {\n reduxStore.dispatch(chartsMetadataRequestSuccess({ data }))\n if (initializeConfig.custom_info === true && typeof data.custom_info !== 'undefined' && data.custom_info !== \"\" && window.netdataSnapshotData === null) {\n //console.log('loading custom dashboard decorations from server ' + initializeConfig.url);\n loadCustomDashboardInfo(serverDefault + data.custom_info, function () {\n initializeDynamicDashboardWithData(data);\n });\n } else {\n //console.log('not loading custom dashboard decorations from server ' + initializeConfig.url);\n initializeDynamicDashboardWithData(data);\n }\n }\n });\n })\n}\n\nwindow.xssModalDisableXss = () => {\n //console.log('disabling xss checks');\n NETDATA.xss.enabled = false;\n NETDATA.xss.enabled_for_data = false;\n initializeConfig.custom_info = true;\n initializeChartsAndCustomInfo();\n return false;\n};\n\n\nwindow.xssModalKeepXss = () => {\n //console.log('keeping xss checks');\n NETDATA.xss.enabled = true;\n NETDATA.xss.enabled_for_data = true;\n initializeConfig.custom_info = false;\n initializeChartsAndCustomInfo();\n return false;\n};\n\nfunction initializeDynamicDashboard(newReduxStore) {\n if (newReduxStore) {\n reduxStore = newReduxStore\n\n netdataPrepCallback()\n\n initializeConfig.url = serverDefault;\n }\n\n if (typeof netdataCheckXSS !== 'undefined' && netdataCheckXSS === true) {\n //$(\"#loadOverlay\").css(\"display\",\"none\");\n document.getElementById('netdataXssModalServer').innerText = initializeConfig.url;\n $('#xssModal').modal('show');\n } else {\n initializeChartsAndCustomInfo();\n }\n}\n\n// ----------------------------------------------------------------------------\n\nfunction versionLog(msg) {\n document.getElementById('versionCheckLog').innerHTML = msg;\n}\n\n// New way of checking for updates, based only on versions\n\nfunction versionsMatch(v1, v2) {\n if (v1 == v2) {\n return true;\n } else {\n let s1 = v1.split('.');\n let s2 = v2.split('.');\n // Check major version\n let n1 = parseInt(s1[0].substring(1, 2), 10);\n let n2 = parseInt(s2[0].substring(1, 2), 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n // Check minor version\n n1 = parseInt(s1[1], 10);\n n2 = parseInt(s2[1], 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n // Split patch: format could be e.g. 0-22-nightly\n s1 = s1[2].split('-');\n s2 = s2[2].split('-');\n\n n1 = parseInt(s1[0], 10);\n n2 = parseInt(s2[0], 10);\n if (n1 < n2) return false;\n else if (n1 > n2) return true;\n\n n1 = (s1.length > 1) ? parseInt(s1[1], 10) : 0;\n n2 = (s2.length > 1) ? parseInt(s2[1], 10) : 0;\n if (n1 < n2) return false;\n else return true;\n }\n}\n\nfunction getGithubLatestVersion(callback) {\n versionLog('Downloading latest version id from github...');\n\n $.ajax({\n url: 'https://api.github.com/repos/netdata/netdata/releases/latest',\n async: true,\n cache: false\n })\n .done(function (data) {\n data = data.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\");\n versionLog('Latest stable version from github is ' + data);\n callback(data);\n })\n .fail(function () {\n versionLog('Failed to download the latest stable version id from github!');\n callback(null);\n });\n}\n\nfunction getGCSLatestVersion(callback) {\n versionLog('Downloading latest version id from GCS...');\n $.ajax({\n url: \"https://www.googleapis.com/storage/v1/b/netdata-nightlies/o/latest-version.txt\",\n async: true,\n cache: false\n })\n .done(function (response) {\n $.ajax({\n url: response.mediaLink,\n async: true,\n cache: false\n })\n .done(function (data) {\n data = data.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\");\n versionLog('Latest nightly version from GCS is ' + data);\n callback(data);\n })\n .fail(function (xhr, textStatus, errorThrown) {\n versionLog('Failed to download the latest nightly version id from GCS!');\n callback(null);\n });\n })\n .fail(function (xhr, textStatus, errorThrown) {\n versionLog('Failed to download the latest nightly version from GCS!');\n callback(null);\n });\n}\n\n\nfunction checkForUpdateByVersion(force, callback) {\n if (options.release_channel === 'stable') {\n getGithubLatestVersion(function (sha2) {\n callback(options.version, sha2);\n });\n } else {\n getGCSLatestVersion(function (sha2) {\n callback(options.version, sha2);\n });\n }\n return null;\n}\n\nwindow.notifyForUpdate = (force) => {\n versionLog('<p>checking for updates...</p>');\n\n var now = Date.now();\n\n if (typeof force === 'undefined' || force !== true) {\n var last = loadLocalStorage('last_update_check');\n\n if (typeof last === 'string') {\n last = parseInt(last);\n } else {\n last = 0;\n }\n\n if (now - last < 3600000 * 8) {\n // no need to check it - too soon\n return;\n }\n }\n\n checkForUpdateByVersion(force, function (sha1, sha2) {\n var save = false;\n\n if (sha1 === null) {\n save = false;\n versionLog('<p><big>Failed to get your netdata version!</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n } else if (sha2 === null) {\n save = false;\n versionLog('<p><big>Failed to get the latest netdata version.</big></p><p>You can always get the latest netdata from <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">its github page</a>.</p>');\n } else if (versionsMatch(sha1, sha2)) {\n save = true;\n versionLog('<p><big>You already have the latest netdata!</big></p><p>No update yet?<br/>We probably need some motivation to keep going on!</p><p>If you haven\\'t already, <a href=\"https://github.com/netdata/netdata\" target=\"_blank\">give netdata a <b><i class=\"fas fa-star\"></i></b> at its github page</a>.</p>');\n } else {\n save = true;\n var compare = 'https://learn.netdata.cloud/docs/agent/changelog/';\n versionLog('<p><big><strong>New version of netdata available!</strong></big></p><p>Latest version: <b><code>' + sha2 + '</code></b></p><p><a href=\"' + compare + '\" target=\"_blank\">Click here for the changes log</a> and<br/><a href=\"https://github.com/netdata/netdata/tree/master/packaging/installer/UPDATE.md\" target=\"_blank\">click here for directions on updating</a> your netdata installation.</p><p>We suggest to review the changes log for new features you may be interested, or important bug fixes you may need.<br/>Keeping your netdata updated is generally a good idea.</p>');\n }\n\n if (save) {\n saveLocalStorage('last_update_check', now.toString());\n }\n });\n}\n\n// ----------------------------------------------------------------------------\n// printing dashboards\n\nfunction showPageFooter() {\n document.getElementById('footer').style.display = 'block';\n}\n\nwindow.printPreflight = () => {\n var url = document.location.origin.toString() + document.location.pathname.toString() + document.location.search.toString() + urlOptions.genHash() + ';mode=print';\n var width = 990;\n var height = screen.height * 90 / 100;\n //console.log(url);\n //console.log(document.location);\n window.open(url, '', 'width=' + width.toString() + ',height=' + height.toString() + ',menubar=no,toolbar=no,personalbar=no,location=no,resizable=no,scrollbars=yes,status=no,chrome=yes,centerscreen=yes,attention=yes,dialog=yes');\n $('#printPreflightModal').modal('hide');\n}\n\nfunction printPage() {\n window.NETDATA.parseDom();\n if (urlOptions.pan_and_zoom === true) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: urlOptions.after,\n before: urlOptions.before,\n }))\n }\n showPageFooter(); // todo after full rewrite the footer should show when charts are loaded\n}\n\n// --------------------------------------------------------------------\n\nfunction jsonStringifyFn(obj) {\n return JSON.stringify(obj, function (key, value) {\n return (typeof value === 'function') ? value.toString() : value;\n });\n}\n\nfunction jsonParseFn(str) {\n return JSON.parse(str, function (key, value) {\n if (typeof value != 'string') {\n return value;\n }\n return (value.substring(0, 8) == 'function') ? eval('(' + value + ')') : value;\n });\n}\n\n// --------------------------------------------------------------------\n\nvar snapshotOptions = {\n bytes_per_chart: 2048,\n compressionDefault: 'pako.deflate.base64',\n\n compressions: {\n 'none': {\n bytes_per_point_memory: 5.2,\n bytes_per_point_disk: 5.6,\n\n compress: function (s) {\n return s;\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return s;\n }\n },\n\n 'pako.deflate.base64': {\n bytes_per_point_memory: 1.8,\n bytes_per_point_disk: 1.9,\n\n compress: function (s) {\n return btoa(pako.deflate(s, { to: 'string' }));\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return pako.inflate(atob(s), { to: 'string' });\n }\n },\n\n 'pako.deflate': {\n bytes_per_point_memory: 1.4,\n bytes_per_point_disk: 3.2,\n\n compress: function (s) {\n return pako.deflate(s, { to: 'string' });\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return pako.inflate(s, { to: 'string' });\n }\n },\n\n 'lzstring.utf16': {\n bytes_per_point_memory: 1.7,\n bytes_per_point_disk: 2.6,\n\n compress: function (s) {\n return LZString.compressToUTF16(s);\n },\n\n compressed_length: function (s) {\n return s.length * 2;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromUTF16(s);\n }\n },\n\n 'lzstring.base64': {\n bytes_per_point_memory: 2.1,\n bytes_per_point_disk: 2.3,\n\n compress: function (s) {\n return LZString.compressToBase64(s);\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromBase64(s);\n }\n },\n\n 'lzstring.uri': {\n bytes_per_point_memory: 2.1,\n bytes_per_point_disk: 2.3,\n\n compress: function (s) {\n return LZString.compressToEncodedURIComponent(s);\n },\n\n compressed_length: function (s) {\n return s.length;\n },\n\n uncompress: function (s) {\n return LZString.decompressFromEncodedURIComponent(s);\n }\n }\n }\n};\n\n// --------------------------------------------------------------------\n// loading snapshots\n\nfunction loadSnapshotModalLog(priority, msg) {\n document.getElementById('loadSnapshotStatus').className = \"alert alert-\" + priority;\n document.getElementById('loadSnapshotStatus').innerHTML = msg;\n}\n\nvar tmpSnapshotData = null;\n\nwindow.loadSnapshot = () => {\n $('#loadSnapshotImport').addClass('disabled');\n\n if (tmpSnapshotData === null) {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'no data have been loaded');\n return;\n }\n\n loadPako(function () {\n loadLzString(function () {\n loadSnapshotModalLog('info', 'Please wait, activating snapshot...');\n $('#loadSnapshotModal').modal('hide');\n\n netdataShowAlarms = false;\n netdataRegistry = false;\n netdataServer = tmpSnapshotData.server;\n\n document.getElementById('charts_div').innerHTML = '';\n document.getElementById('sidebar').innerHTML = '';\n\n if (typeof tmpSnapshotData.hash !== 'undefined') {\n urlOptions.hash = tmpSnapshotData.hash;\n } else {\n urlOptions.hash = '#';\n }\n\n if (typeof tmpSnapshotData.info !== 'undefined') {\n var info = jsonParseFn(tmpSnapshotData.info);\n if (typeof info.menu !== 'undefined') {\n netdataDashboard.menu = info.menu;\n }\n\n if (typeof info.submenu !== 'undefined') {\n netdataDashboard.submenu = info.submenu;\n }\n\n if (typeof info.context !== 'undefined') {\n netdataDashboard.context = info.context;\n }\n }\n\n if (typeof tmpSnapshotData.compression !== 'string') {\n tmpSnapshotData.compression = 'none';\n }\n\n if (typeof snapshotOptions.compressions[tmpSnapshotData.compression] === 'undefined') {\n alert('unknown compression method: ' + tmpSnapshotData.compression);\n tmpSnapshotData.compression = 'none';\n }\n\n tmpSnapshotData.uncompress = snapshotOptions.compressions[tmpSnapshotData.compression].uncompress;\n\n window.NETDATA.parseDom()\n reduxStore.dispatch(loadSnapshotAction({\n snapshot: tmpSnapshotData,\n }))\n\n window.netdataSnapshotData = tmpSnapshotData;\n\n urlOptions.after = tmpSnapshotData.after_ms;\n urlOptions.before = tmpSnapshotData.before_ms;\n\n if (typeof tmpSnapshotData.highlight_after_ms !== 'undefined'\n && tmpSnapshotData.highlight_after_ms !== null\n && tmpSnapshotData.highlight_after_ms > 0\n && typeof tmpSnapshotData.highlight_before_ms !== 'undefined'\n && tmpSnapshotData.highlight_before_ms !== null\n && tmpSnapshotData.highlight_before_ms > 0\n ) {\n urlOptions.highlight_after = tmpSnapshotData.highlight_after_ms;\n urlOptions.highlight_before = tmpSnapshotData.highlight_before_ms;\n urlOptions.highlight = true;\n } else {\n urlOptions.highlight_after = 0;\n urlOptions.highlight_before = 0;\n urlOptions.highlight = false;\n }\n\n netdataCheckXSS = false; // disable the modal - this does not affect XSS checks, since dashboard.js is already loaded\n NETDATA.xss.enabled = true; // we should not do any remote requests, but if we do, check them\n NETDATA.xss.enabled_for_data = true; // check also snapshot data - that have been excluded from the initial check, due to compression\n loadSnapshotPreflightEmpty();\n initializeDynamicDashboard();\n });\n });\n};\n\nfunction loadSnapshotPreflightFile(file) {\n var filename = NETDATA.xss.string(file.name);\n var fr = new FileReader();\n fr.onload = function (e) {\n document.getElementById('loadSnapshotFilename').innerHTML = filename;\n var result = null;\n try {\n result = NETDATA.xss.checkAlways('snapshot', JSON.parse(e.target.result), /^(snapshot\\.info|snapshot\\.data)$/);\n\n //console.log(result);\n var date_after = new Date(result.after_ms);\n var date_before = new Date(result.before_ms);\n\n if (typeof result.charts_ok === 'undefined') {\n result.charts_ok = 'unknown';\n }\n\n if (typeof result.charts_failed === 'undefined') {\n result.charts_failed = 0;\n }\n\n if (typeof result.compression === 'undefined') {\n result.compression = 'none';\n }\n\n if (typeof result.data_size === 'undefined') {\n result.data_size = 0;\n }\n\n document.getElementById('loadSnapshotFilename').innerHTML = '<code>' + filename + '</code>';\n document.getElementById('loadSnapshotHostname').innerHTML = '<b>' + result.hostname + '</b>, netdata version: <b>' + result.netdata_version.toString() + '</b>';\n document.getElementById('loadSnapshotURL').innerHTML = result.url;\n document.getElementById('loadSnapshotCharts').innerHTML = result.charts.charts_count.toString() + ' charts, ' + result.charts.dimensions_count.toString() + ' dimensions, ' + result.data_points.toString() + ' points per dimension, ' + Math.round(result.duration_ms / result.data_points).toString() + ' ms per point';\n document.getElementById('loadSnapshotInfo').innerHTML = 'version: <b>' + result.snapshot_version.toString() + '</b>, includes <b>' + result.charts_ok.toString() + '</b> unique chart data queries ' + ((result.charts_failed > 0) ? ('<b>' + result.charts_failed.toString() + '</b> failed') : '').toString() + ', compressed with <code>' + result.compression.toString() + '</code>, data size ' + (Math.round(result.data_size * 100 / 1024 / 1024) / 100).toString() + ' MB';\n document.getElementById('loadSnapshotTimeRange').innerHTML = '<b>' + localeDateString(date_after) + ' ' + localeTimeString(date_after) + '</b> to <b>' + localeDateString(date_before) + ' ' + localeTimeString(date_before) + '</b>';\n document.getElementById('loadSnapshotComments').innerHTML = ((result.comments) ? result.comments : '').toString();\n loadSnapshotModalLog('success', 'File loaded, click <b>Import</b> to render it!');\n $('#loadSnapshotImport').removeClass('disabled');\n\n tmpSnapshotData = result;\n }\n catch (e) {\n console.log(e);\n document.getElementById('loadSnapshotStatus').className = \"alert alert-danger\";\n document.getElementById('loadSnapshotStatus').innerHTML = \"Failed to parse this file!\";\n $('#loadSnapshotImport').addClass('disabled');\n }\n }\n\n //console.log(file);\n fr.readAsText(file);\n};\n\nfunction loadSnapshotPreflightEmpty() {\n document.getElementById('loadSnapshotFilename').innerHTML = '';\n document.getElementById('loadSnapshotHostname').innerHTML = '';\n document.getElementById('loadSnapshotURL').innerHTML = '';\n document.getElementById('loadSnapshotCharts').innerHTML = '';\n document.getElementById('loadSnapshotInfo').innerHTML = '';\n document.getElementById('loadSnapshotTimeRange').innerHTML = '';\n document.getElementById('loadSnapshotComments').innerHTML = '';\n loadSnapshotModalLog('success', 'Browse for a snapshot file (or drag it and drop it here), then click <b>Import</b> to render it.');\n $('#loadSnapshotImport').addClass('disabled');\n};\n\nvar loadSnapshotDragAndDropInitialized = false;\n\nfunction loadSnapshotDragAndDropSetup() {\n if (loadSnapshotDragAndDropInitialized === false) {\n loadSnapshotDragAndDropInitialized = true;\n $('#loadSnapshotDragAndDrop')\n .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) {\n e.preventDefault();\n e.stopPropagation();\n })\n .on('drop', function (e) {\n if (e.originalEvent.dataTransfer.files.length) {\n loadSnapshotPreflightFile(e.originalEvent.dataTransfer.files.item(0));\n } else {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'No file selected');\n }\n });\n }\n};\n\nwindow.loadSnapshotPreflight = () => {\n var files = document.getElementById('loadSnapshotSelectFiles').files;\n if (!files.length) {\n loadSnapshotPreflightEmpty();\n loadSnapshotModalLog('danger', 'No file selected');\n return;\n }\n\n loadSnapshotModalLog('info', 'Loading file...');\n\n loadSnapshotPreflightFile(files.item(0));\n}\n\n// --------------------------------------------------------------------\n// saving snapshots\n\nvar saveSnapshotStop = false;\n\nfunction saveSnapshotCancel() {\n reduxStore.dispatch(stopSnapshotModeAction())\n saveSnapshotStop = true;\n}\n\nvar saveSnapshotModalInitialized = false;\n\nfunction saveSnapshotModalSetup() {\n if (saveSnapshotModalInitialized === false) {\n saveSnapshotModalInitialized = true;\n $('#saveSnapshotModal')\n .on('hide.bs.modal', saveSnapshotCancel)\n .on('show.bs.modal', saveSnapshotModalInit)\n .on('shown.bs.modal', function () {\n $('#saveSnapshotResolutionSlider').find(\".slider-handle:first\").attr(\"tabindex\", 1);\n document.getElementById('saveSnapshotComments').focus();\n });\n }\n};\n\nfunction saveSnapshotModalLog(priority, msg) {\n document.getElementById('saveSnapshotStatus').className = \"alert alert-\" + priority;\n document.getElementById('saveSnapshotStatus').innerHTML = msg;\n}\n\nfunction saveSnapshotModalShowExpectedSize() {\n var points = Math.round(saveSnapshotViewDuration / saveSnapshotSelectedSecondsPerPoint);\n var priority = 'info';\n var msg = 'A moderate snapshot.';\n\n var sizemb = Math.round(\n (options.data.charts_count * snapshotOptions.bytes_per_chart\n + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_disk)\n * 10 / 1024 / 1024) / 10;\n\n var memmb = Math.round(\n (options.data.charts_count * snapshotOptions.bytes_per_chart\n + options.data.dimensions_count * points * snapshotOptions.compressions[saveSnapshotCompression].bytes_per_point_memory)\n * 10 / 1024 / 1024) / 10;\n\n if (sizemb < 10) {\n priority = 'success';\n msg = 'A nice small snapshot!';\n }\n if (sizemb > 50) {\n priority = 'warning';\n msg = 'Will stress your browser...';\n }\n if (sizemb > 100) {\n priority = 'danger';\n msg = 'Hm... good luck...';\n }\n\n saveSnapshotModalLog(priority, 'The snapshot will have ' + points.toString() + ' points per dimension. Expected size on disk ' + sizemb + ' MB, at browser memory ' + memmb + ' MB.<br/>' + msg);\n}\n\nvar saveSnapshotCompression = snapshotOptions.compressionDefault;\n\nfunction saveSnapshotSetCompression(name) {\n saveSnapshotCompression = name;\n document.getElementById('saveSnapshotCompressionName').innerHTML = saveSnapshotCompression;\n saveSnapshotModalShowExpectedSize();\n}\n\nvar saveSnapshotSlider = null;\nvar saveSnapshotSelectedSecondsPerPoint = 1;\nvar saveSnapshotViewDuration = 1;\n\nfunction saveSnapshotModalInit() {\n $('#saveSnapshotModalProgressSection').hide();\n $('#saveSnapshotResolutionRadio').show();\n saveSnapshotModalLog('info', 'Select resolution and click <b>Save</b>');\n $('#saveSnapshotExport').removeClass('disabled');\n\n loadBootstrapSlider(function () {\n saveSnapshotViewDuration = options.duration;\n var start_ms = Math.round(Date.now() - saveSnapshotViewDuration * 1000);\n const reduxState = reduxStore.getState()\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\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() - options.duration * 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 reduxState = reduxStore.getState()\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 var timezone_sync_option = function (option) {\n var self = $('#' + option);\n\n const timezoneOption = getOption(\"timezone\")\n document.getElementById('browser_timezone').innerText = browser_timezone;\n document.getElementById('server_timezone').innerText = options.timezone || \"unknown\";\n document.getElementById('current_timezone').innerText = timezoneOption === 'default'\n ? 'unset, using browser default' : timezoneOption;\n\n const isUsingTimezone = timezoneOption !== \"\" && timezoneOption !== \"default\"\n if (self.prop('checked') === isUsingTimezone) {\n self.bootstrapToggle(isUsingTimezone ? 'off' : 'on');\n }\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 sync_option('sync_pan_and_zoom');\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 timezone_sync_option('local_timezone');\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 $('#sync_pan_and_zoom').change(function () {\n setOption('sync_pan_and_zoom', $(this).prop('checked'));\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 $('#local_timezone').change(function () {\n if ($(this).prop('checked')) {\n selected_server_timezone('default', true);\n } else {\n selected_server_timezone('default', false);\n }\n });\n\n $('#units_conversion').change(function () {\n setOption('units', $(this).prop('checked') ? 'auto' : 'original');\n update_options_modal()\n });\n $('#units_temp').change(function () {\n setOption('temperature', $(this).prop('checked') ? 'celsius' : 'fahrenheit');\n });\n\n $('#legend_right').change(function () {\n setOption('legend_right', $(this).prop('checked'));\n // reloading for now, it's much easier than rebuilding charts bootstraping in main.js\n netdataReload();\n });\n\n $('#show_help').change(function () {\n urlOptions.help = $(this).prop('checked');\n urlOptions.hashUpdate();\n\n setOption('show_help', urlOptions.help);\n netdataReload();\n });\n\n // this has to be the last\n // it reloads the page\n $('#netdata_theme_control').change(function () {\n urlOptions.theme = $(this).prop('checked') ? 'slate' : 'white';\n urlOptions.hashUpdate();\n\n if (setTheme(urlOptions.theme)) {\n netdataReload();\n }\n });\n}\n\nconst CHART_DIV_ID_PREFIX = 'chart_'\nconst CHART_DIV_OFFSET = -50\n\nfunction scrollDashboardTo() {\n if (window.netdataSnapshotData !== null && typeof window.netdataSnapshotData.hash !== 'undefined') {\n scrollToId(window.netdataSnapshotData.hash.replace('#', ''));\n } else {\n // check if we have to jump to a specific section\n scrollToId(urlOptions.hash.replace('#', ''));\n if (urlOptions.chart !== null) {\n const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(urlOptions.chart)}`)\n if (chartElement) {\n const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n document.querySelector(\"html\").scrollTop = offset\n }\n }\n }\n}\n\nvar modalHiddenCallback = null;\n\nwindow.scrollToChartAfterHidingModal = (chart, alarmDate, alarmStatus) => {\n modalHiddenCallback = function () {\n\n if (typeof chart === 'string') {\n const chartElement = document.getElementById(`${CHART_DIV_ID_PREFIX}${name2id(chart)}`)\n if (chartElement) {\n const offset = chartElement.offsetTop + CHART_DIV_OFFSET;\n document.querySelector(\"html\").scrollTop = offset\n }\n }\n\n if (['WARNING', 'CRITICAL'].includes(alarmStatus)) {\n const twoMinutes = 2 * 60 * 1000\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: alarmDate - twoMinutes,\n before: alarmDate + twoMinutes,\n }))\n }\n };\n}\n\n// ----------------------------------------------------------------------------\n\nfunction enableTooltipsAndPopovers() {\n $('[data-toggle=\"tooltip\"]').tooltip({\n animated: 'fade',\n trigger: 'hover',\n html: true,\n delay: { show: 500, hide: 0 },\n container: 'body'\n });\n $('[data-toggle=\"popover\"]').popover();\n}\n\n// ----------------------------------------------------------------------------\n\nvar runOnceOnDashboardLastRun = 0;\n\nfunction runOnceOnDashboardWithjQuery() {\n if (runOnceOnDashboardLastRun !== 0) {\n scrollDashboardTo();\n\n // restore the scrollspy at the proper position\n $(document.body).scrollspy('refresh');\n $(document.body).scrollspy('process');\n\n return;\n }\n\n runOnceOnDashboardLastRun = Date.now();\n\n // ------------------------------------------------------------------------\n // bootstrap modals\n\n // prevent bootstrap modals from scrolling the page\n // maintains the current scroll position\n // https://stackoverflow.com/a/34754029/4525767\n\n var scrollPos = 0;\n var modal_depth = 0; // how many modals are currently open\n var modal_shown = false; // set to true, if a modal is shown\n var netdata_paused_on_modal = false; // set to true, if the modal paused netdata\n var scrollspyOffset = $(window).height() / 3; // will be updated below - the offset of scrollspy to select an item\n\n $('.modal')\n .on('show.bs.modal', function () {\n if (modal_depth === 0) {\n scrollPos = window.scrollY;\n\n $('body').css({\n overflow: 'hidden',\n position: 'fixed',\n top: -scrollPos\n });\n\n modal_shown = true;\n\n if (NETDATA.options.pauseCallback === null) {\n NETDATA.pause(function () {\n });\n netdata_paused_on_modal = true;\n } else {\n netdata_paused_on_modal = false;\n }\n }\n\n modal_depth++;\n //console.log(urlOptions.after);\n\n })\n .on('hide.bs.modal', function () {\n\n modal_depth--;\n\n if (modal_depth <= 0) {\n modal_depth = 0;\n\n $('body')\n .css({\n overflow: '',\n position: '',\n top: ''\n });\n\n // scroll to the position we had open before the modal\n $('html, body')\n .animate({ scrollTop: scrollPos }, 0);\n\n // unpause netdata, if we paused it\n if (netdata_paused_on_modal === true) {\n NETDATA.unpause();\n netdata_paused_on_modal = false;\n }\n\n // restore the scrollspy at the proper position\n $(document.body).scrollspy('process');\n }\n //console.log(urlOptions.after);\n })\n .on('hidden.bs.modal', function () {\n if (modal_depth === 0) {\n modal_shown = false;\n }\n\n if (typeof modalHiddenCallback === 'function') {\n modalHiddenCallback();\n }\n\n modalHiddenCallback = null;\n //console.log(urlOptions.after);\n });\n\n // ------------------------------------------------------------------------\n // sidebar / affix\n\n $('#sidebar')\n .affix({\n offset: {\n top: 0,\n bottom: 0\n }\n })\n .on('affixed.bs.affix', function () {\n // fix scrolling of very long affix lists\n // http://stackoverflow.com/questions/21691585/bootstrap-3-1-0-affix-too-long\n\n $(this).removeAttr('style');\n })\n .on('affix-top.bs.affix', function () {\n // fix bootstrap affix click bug\n // https://stackoverflow.com/a/37847981/4525767\n\n if (modal_shown) {\n return false;\n }\n })\n .on('activate.bs.scrollspy', function (e) {\n // change the URL based on the current position of the screen\n\n if (modal_shown === false) {\n var el = $(e.target);\n var hash = el.find('a').attr('href');\n if (typeof hash === 'string' && hash.substring(0, 1) === '#' && urlOptions.hash.startsWith(hash + '_submenu_') === false) {\n urlOptions.hash = hash;\n urlOptions.hashUpdate();\n }\n }\n });\n\n Ps.initialize(document.getElementById('sidebar'), {\n wheelSpeed: 0.5,\n wheelPropagation: true,\n swipePropagation: true,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n useBothWheelAxes: false,\n suppressScrollX: true,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n theme: 'default'\n });\n\n // ------------------------------------------------------------------------\n // scrollspy\n\n if (scrollspyOffset > 250) {\n scrollspyOffset = 250;\n }\n if (scrollspyOffset < 75) {\n scrollspyOffset = 75;\n }\n document.body.setAttribute('data-offset', scrollspyOffset);\n\n // scroll the dashboard, before activating the scrollspy, so that our\n // hash will not be updated before we got the chance to scroll to it\n scrollDashboardTo();\n\n $(document.body).scrollspy({\n target: '#sidebar',\n offset: scrollspyOffset // controls the diff of the <hX> element to the top, to select it\n });\n\n // ------------------------------------------------------------------------\n // my-netdata menu\n\n $('#deleteRegistryModal')\n .on('hidden.bs.modal', function () {\n deleteRegistryGuid = null;\n });\n\n // ------------------------------------------------------------------------\n // update modal\n\n $('#updateModal')\n .on('show.bs.modal', function () {\n versionLog('checking, please wait...');\n })\n .on('shown.bs.modal', function () {\n notifyForUpdate(true);\n });\n\n // ------------------------------------------------------------------------\n // alarms modal\n\n $('#alarmsModal')\n .on('shown.bs.modal', function () {\n alarmsUpdateModal();\n })\n .on('hidden.bs.modal', function () {\n document.getElementById('alarms_active').innerHTML =\n document.getElementById('alarms_all').innerHTML =\n document.getElementById('alarms_log').innerHTML =\n 'loading...';\n });\n\n // ------------------------------------------------------------------------\n\n dashboardSettingsSetup();\n loadSnapshotDragAndDropSetup();\n saveSnapshotModalSetup();\n showPageFooter();\n\n // ------------------------------------------------------------------------\n // https://github.com/viralpatel/jquery.shorten/blob/master/src/jquery.shorten.js\n\n $.fn.shorten = function (settings) {\n \"use strict\";\n\n var config = {\n showChars: 750,\n minHideChars: 10,\n ellipsesText: \"...\",\n moreText: '<i class=\"fas fa-expand\"></i> show more information',\n lessText: '<i class=\"fas fa-compress\"></i> show less information',\n onLess: function () {\n NETDATA.onscroll();\n },\n onMore: function () {\n NETDATA.onscroll();\n },\n errMsg: null,\n force: false\n };\n\n if (settings) {\n $.extend(config, settings);\n }\n\n if ($(this).data('jquery.shorten') && !config.force) {\n return false;\n }\n $(this).data('jquery.shorten', true);\n\n $(document).off(\"click\", '.morelink');\n\n $(document).on({\n click: function () {\n\n var $this = $(this);\n if ($this.hasClass('less')) {\n $this.removeClass('less');\n $this.html(config.moreText);\n $this.parent().prev().animate({ 'height': '0' + '%' }, 0, function () {\n $this.parent().prev().prev().show();\n }).hide(0, function () {\n config.onLess();\n });\n } else {\n $this.addClass('less');\n $this.html(config.lessText);\n $this.parent().prev().animate({ 'height': '100' + '%' }, 0, function () {\n $this.parent().prev().prev().hide();\n }).show(0, function () {\n config.onMore();\n });\n }\n return false;\n }\n }, '.morelink');\n\n return this.each(function () {\n var $this = $(this);\n\n var content = $this.html();\n var contentlen = $this.text().length;\n if (contentlen > config.showChars + config.minHideChars) {\n var c = content.substr(0, config.showChars);\n if (c.indexOf('<') >= 0) // If there's HTML don't want to cut it\n {\n var inTag = false; // I'm in a tag?\n var bag = ''; // Put the characters to be shown here\n var countChars = 0; // Current bag size\n var openTags = []; // Stack for opened tags, so I can close them later\n var tagName = null;\n\n for (var i = 0, r = 0; r <= config.showChars; i++) {\n if (content[i] === '<' && !inTag) {\n inTag = true;\n\n // This could be \"tag\" or \"/tag\"\n tagName = content.substring(i + 1, content.indexOf('>', i));\n\n // If its a closing tag\n if (tagName[0] === '/') {\n\n if (tagName !== ('/' + openTags[0])) {\n config.errMsg = 'ERROR en HTML: the top of the stack should be the tag that closes';\n } else {\n openTags.shift(); // Pops the last tag from the open tag stack (the tag is closed in the retult HTML!)\n }\n\n } else {\n // There are some nasty tags that don't have a close tag like <br/>\n if (tagName.toLowerCase() !== 'br') {\n openTags.unshift(tagName); // Add to start the name of the tag that opens\n }\n }\n }\n\n if (inTag && content[i] === '>') {\n inTag = false;\n }\n\n if (inTag) {\n bag += content.charAt(i);\n } else {\n // Add tag name chars to the result\n r++;\n if (countChars <= config.showChars) {\n bag += content.charAt(i); // Fix to ie 7 not allowing you to reference string characters using the []\n countChars++;\n } else {\n // Now I have the characters needed\n if (openTags.length > 0) {\n // I have unclosed tags\n\n for (var j = 0; j < openTags.length; j++) {\n bag += '</' + openTags[j] + '>'; // Close all tags that were opened\n\n // You could shift the tag from the stack to check if you end with an empty stack, that means you have closed all open tags\n }\n break;\n }\n }\n }\n }\n c = $('<div/>').html(bag + '<span class=\"ellip\">' + config.ellipsesText + '</span>').html();\n } else {\n c += config.ellipsesText;\n }\n\n var html = '<div class=\"shortcontent\">' + c +\n '</div><div class=\"allcontent\">' + content +\n '</div><span><a href=\"javascript://nop/\" class=\"morelink\">' + config.moreText + '</a></span>';\n\n $this.html(html);\n $this.find(\".allcontent\").hide(); // Hide all text\n $('.shortcontent p:last', $this).css('margin-bottom', 0); //Remove bottom margin on last paragraph as it's likely shortened\n }\n });\n };\n}\n\nfunction finalizePage() {\n if (urlOptions.after < 0) {\n reduxStore.dispatch(setDefaultAfterAction({ after: urlOptions.after }))\n } else if (urlOptions.pan_and_zoom === true) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: urlOptions.after,\n before: urlOptions.before,\n }))\n }\n\n // resize all charts - without starting the background thread\n // this has to be done while NETDATA is paused\n // if we ommit this, the affix menu will be wrong, since all\n // the Dom elements are initially zero-sized\n NETDATA.parseDom();\n\n // let it run (update the charts)\n NETDATA.unpause();\n\n runOnceOnDashboardWithjQuery();\n $(\".shorten\").shorten();\n enableTooltipsAndPopovers();\n\n if (isDemo) {\n // do not to give errors on netdata demo servers for 60 seconds\n NETDATA.options.current.retries_on_data_failures = 60;\n\n // google analytics when this is used for the home page of the demo sites\n // this does not run on user's installations\n setTimeout(function () {\n (function (i, s, o, g, r, a, m) {\n i['GoogleAnalyticsObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments)\n }, i[r].l = 1 * new Date();\n a = s.createElement(o),\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m)\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n\n ga('create', 'UA-64295674-3', 'auto');\n ga('send', 'pageview', '/demosite/' + window.location.host);\n }, 2000);\n } else {\n notifyForUpdate();\n }\n\n if (urlOptions.show_alarms === true) {\n setTimeout(function () {\n $('#alarmsModal').modal('show');\n }, 1000);\n }\n\n NETDATA.onresizeCallback = function () {\n Ps.update(document.getElementById('sidebar'));\n };\n NETDATA.onresizeCallback();\n\n if (window.netdataSnapshotData !== null) {\n reduxStore.dispatch(setGlobalPanAndZoomAction({\n after: window.netdataSnapshotData.after_ms,\n before: window.netdataSnapshotData.before_ms,\n }))\n }\n}\n\nwindow.resetDashboardOptions = () => {\n reduxStore.dispatch(resetOptionsAction())\n\n // it's dirty, but this will be rewritten anyway\n urlOptions.update_always = false;\n urlOptions.help = false;\n urlOptions.theme = \"slate\";\n urlOptions.hashUpdate();\n\n netdataReload()\n}\n\n// callback to add the dashboard info to the\n// parallel javascript downloader in netdata\nexport const netdataPrepCallback = () => {\n if (isDemo) {\n document.getElementById('masthead').style.display = 'block';\n } else {\n if (urlOptions.update_always === true) {\n setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always);\n }\n }\n};\n\nwindow.selected_server_timezone = function (timezone, status) {\n // clear the error\n document.getElementById('timezone_error_message').innerHTML = '';\n\n if (typeof status === 'undefined') {\n // the user selected a timezone from the menu\n\n setOption('user_set_server_timezone', timezone);\n\n if (!isProperTimezone(timezone)) {\n setOption(\"timezone\", \"default\")\n\n if (!$('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('on');\n }\n\n document.getElementById('timezone_error_message').innerHTML = 'Ooops! That timezone was not accepted by your browser. Please open a github issue to help us fix it.';\n setOption('user_set_server_timezone', options.timezone);\n } else {\n if ($('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('off');\n }\n setOption(\"timezone\", timezone)\n }\n } else if (status === true) {\n // the user wants the browser default timezone to be activated\n setOption(\"timezone\", \"default\")\n } else {\n // the user wants the server default timezone to be activated\n\n let userSetServerTimezone = getOption(\"user_set_server_timezone\")\n if (userSetServerTimezone === 'default') {\n setOption(\"user_set_server_timezone\", options.timezone) // timezone from /charts endpoint\n userSetServerTimezone = options.timezone\n }\n\n if (!isProperTimezone(userSetServerTimezone)) {\n setOption(\"timezone\", \"default\");\n\n if (!$('#local_timezone').prop('checked')) {\n $('#local_timezone').bootstrapToggle('on');\n }\n\n document.getElementById('timezone_error_message').innerHTML = 'Sorry. The timezone \"' + timezone.toString() + '\" is not accepted by your browser. Please select one from the list.';\n setOption('user_set_server_timezone', options.timezone);\n } else {\n setOption(\"timezone\", userSetServerTimezone)\n }\n }\n\n const timezoneOption = getOption(\"timezone\")\n document.getElementById('current_timezone').innerText = (timezoneOption === 'default') ? 'unset, using browser default' : timezoneOption;\n return false;\n};\n\nexport var netdataCallback = initializeDynamicDashboard;\n\nwindow.showSignInModal = function() {\n document.getElementById(\"sim-registry\").innerHTML = getFromRegistry(\"registryServer\");\n $(\"#signInModal\").modal(\"show\");\n}\n\nwindow.explicitlySignIn = () => {\n $(\"#signInModal\").modal(\"hide\");\n reduxStore.dispatch(explicitlySignInAction())\n};\n","import { AlarmStatus } from \"domains/global/types\"\n\nexport const storeKey = \"global\"\n\nexport const TEMPORARY_MAIN_JS_TIMEOUT = 1000\n\nexport const MASKED_DATA = \"***\"\n\nexport const NOTIFICATIONS_TIMEOUT = 5000\n\nexport const INFO_POLLING_FREQUENCY = 5000\n\nexport const CLOUD_BASE_URL_DISABLED = \"CLOUD_BASE_URL_DISABLED\"\n\nexport const alarmStatuses: AlarmStatus[] = [\"WARNING\", \"ERROR\", \"REMOVED\", \"UNDEFINED\", \"UNINITIALIZED\", \"CLEAR\", \"CRITICAL\"]\n","import { equals } from \"ramda\"\n\n// we use numbers to specify time. it can be either a timestamp (ms), or a relative value in seconds\n// which is always 0 or less (0 is now, -300 is -5 minutes)\n\nexport const isTimestamp = (x: number) => x > 0\n\nexport const NETDATA_REGISTRY_SERVER = \"https://registry.my-netdata.io\"\n\nexport const MS_IN_SECOND = 1000\nexport const NODE_VIEW_DYGRAPH_TITLE_HEIGHT = 30\nexport const DEFAULT_DASHBOARD_DURATION = 5 * 60\n\nexport const getIframeSrc = (cloudBaseURL: string, path: string) => `${cloudBaseURL}/sso/v2/${path}`\nexport const utmUrlSuffix = \"&utm_source=agent&utm_medium=web\"\n\nexport const getInitialAfterFromWindow = () => {\n const div = document.getElementById(\"charts_div\")\n if (!div) {\n // eslint-disable-next-line no-console\n console.error(\"Couldn't find '.charts_div' element to calculate width\")\n return -900\n }\n // based on https://github.com/netdata/dashboard/blob/7a7b538b00f1c5a4e1550f69cb5333212bb68f95/src/main.js#L1753\n // eslint-disable-next-line max-len\n // var duration = Math.round(($(div).width() * pcent_width / 100 * data.update_every / 3) / 60) * 60;\n return -Math.round((div.getBoundingClientRect().width / 3) / 60) * 60\n}\n\nexport const SPACE_PANEL_STATE = \"space-panel-state\"\n\nexport const useNewKeysOnlyIfDifferent = <T extends {}>(\n keys: (keyof T)[], obj1: T | null, obj2: T,\n): T => {\n if (!obj1) {\n return obj2\n }\n return keys.reduce<T>((acc, key) => ({\n ...acc,\n [key]: equals(obj1[key], obj2![key]) ? obj1[key] : obj2[key],\n }), obj2)\n}\n","import {\n concat, cond, equals, identity, last, pipe, T,\n} from \"ramda\"\n\nimport { isDevelopmentEnv, isMainJs, isTestingEnv } from \"utils/env\"\n\n\n// this part needs to be static and should run immediately because otherwise document.currentScript\n// will be null\nconst currentScript = isTestingEnv\n ? { src: \"http://localhost:3000/some-script.js\" } // test env doesnt have document.currentScript\n : document.currentScript\n\nconst getScriptSource = () => {\n // logic based on old dashboard\n\n // http://stackoverflow.com/questions/984510/what-is-my-script-src-url\n // http://stackoverflow.com/questions/6941533/get-protocol-domain-and-port-from-url\n const script = cond([\n [Boolean, identity],\n // \"last\" typings don't work well with HTMLScriptElement\n // if document.currentScript is not available\n [T, () => last(document.getElementsByTagName(\"script\") as unknown as [HTMLScriptElement])],\n ])(currentScript)\n\n return script.src\n}\n\nexport const getPathFromScriptSource = (source: string) => {\n // match strings not containing slash, ending with `.js`, with optional suffix started by `?`\n const jsFilenameRegex = \"[^\\\\/]*\\\\.js(\\\\/?.*)?$\"\n const staticJsPath = \"/static/js\"\n return source.replace(new RegExp(jsFilenameRegex), \"\")\n .replace(staticJsPath, \"\")\n}\n\nconst getDefaultServer = () => {\n if (isDevelopmentEnv) {\n return \"http://localhost:19999\"\n }\n\n // Agent Dashboard does not need sophisticated server-detection, which is causing problems\n // when navigating through streamed nodes. Let's overwrite that setting\n if (isMainJs) {\n const pathname = window.location.pathname\n .replace(\"index.html\", \"\")\n // todo consider .replace(/[^\\/]*\\.html/, \"\") (every .html file in the url)\n .replace(\"default.html\", \"\") // for netdata demo servers\n return window.location.origin + pathname\n }\n\n const source = getScriptSource()\n return getPathFromScriptSource(source)\n}\n\n// append \"/\" at the end, if it's not already there\nexport const alwaysEndWithSlash = cond([\n [pipe(last, equals(\"/\")), identity],\n [T, (x: string) => concat(x, \"/\")], // R.__ typings don't work well\n])\n\nexport const serverDefault: string = alwaysEndWithSlash(\n window.netdataServer || getDefaultServer(),\n)\n\nexport const serverStatic: string = isDevelopmentEnv\n ? \"/\" // for localhost:3000/css/...\n : alwaysEndWithSlash(getDefaultServer()) // by default, load from netdata server\n","/* eslint-disable */\n/*!\n * d3pie\n * @author Ben Keen\n * @version 0.1.9\n * @date June 17th, 2015\n * @repo http://github.com/benkeen/d3pie\n * SPDX-License-Identifier: MIT\n */\n\n// UMD pattern from https://github.com/umdjs/umd/blob/master/returnExports.js\n(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module\n define([], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but only CommonJS-like environments that support module.exports,\n // like Node\n module.exports = factory();\n } else {\n // browser globals (root is window)\n root.d3pie = factory(root);\n }\n}(this, function() {\n\n var _scriptName = \"d3pie\";\n var _version = \"0.2.1\";\n\n // used to uniquely generate IDs and classes, ensuring no conflict between multiple pies on the same page\n var _uniqueIDCounter = 0;\n\n\n // this section includes all helper libs on the d3pie object. They're populated via grunt-template. Note: to keep\n // the syntax highlighting from getting all messed up, I commented out each line. That REQUIRES each of the files\n // to have an empty first line. Crumby, yes, but acceptable.\n //// --------- _default-settings.js -----------/**\n/**\n * Contains the out-the-box settings for the script. Any of these settings that aren't explicitly overridden for the\n * d3pie instance will inherit from these. This is also included on the main website for use in the generation script.\n */\nvar defaultSettings = {\n header: {\n title: {\n text: \"\",\n color: \"#333333\",\n fontSize: 18,\n fontWeight: \"bold\",\n font: \"arial\"\n },\n subtitle: {\n text: \"\",\n color: \"#666666\",\n fontSize: 14,\n fontWeight: \"bold\",\n font: \"arial\"\n },\n location: \"top-center\",\n titleSubtitlePadding: 8\n },\n footer: {\n text: \t \"\",\n color: \"#666666\",\n fontSize: 14,\n fontWeight: \"bold\",\n font: \"arial\",\n location: \"left\"\n },\n size: {\n canvasHeight: 500,\n canvasWidth: 500,\n pieInnerRadius: \"0%\",\n pieOuterRadius: null\n },\n data: {\n sortOrder: \"none\",\n ignoreSmallSegments: {\n enabled: false,\n valueType: \"percentage\",\n value: null\n },\n smallSegmentGrouping: {\n enabled: false,\n value: 1,\n valueType: \"percentage\",\n label: \"Other\",\n color: \"#cccccc\"\n },\n content: []\n },\n labels: {\n outer: {\n format: \"label\",\n hideWhenLessThanPercentage: null,\n pieDistance: 30\n },\n inner: {\n format: \"percentage\",\n hideWhenLessThanPercentage: null\n },\n mainLabel: {\n color: \"#333333\",\n font: \"arial\",\n fontWeight: \"normal\",\n fontSize: 10\n },\n percentage: {\n color: \"#dddddd\",\n font: \"arial\",\n fontWeight: \"bold\",\n fontSize: 10,\n decimalPlaces: 0\n },\n value: {\n color: \"#cccc44\",\n fontWeight: \"bold\",\n font: \"arial\",\n fontSize: 10\n },\n lines: {\n enabled: true,\n style: \"curved\",\n color: \"segment\"\n },\n truncation: {\n enabled: false,\n truncateLength: 30\n },\n formatter: null\n },\n effects: {\n load: {\n effect: \"none\", // \"default\", commented in the code\n speed: 1000\n },\n pullOutSegmentOnClick: {\n effect: \"none\", // \"bounce\", commented in the code\n speed: 300,\n size: 10\n },\n highlightSegmentOnMouseover: false,\n highlightLuminosity: -0.2\n },\n tooltips: {\n enabled: false,\n type: \"placeholder\", // caption|placeholder\n string: \"\",\n placeholderParser: null,\n styles: {\n fadeInSpeed: 250,\n backgroundColor: \"#000000\",\n backgroundOpacity: 0.5,\n color: \"#efefef\",\n borderRadius: 2,\n font: \"arial\",\n fontWeight: \"bold\",\n fontSize: 10,\n padding: 4\n }\n },\n misc: {\n colors: {\n background: null,\n segments: [\n \"#2484c1\", \"#65a620\", \"#7b6888\", \"#a05d56\", \"#961a1a\", \"#d8d23a\", \"#e98125\", \"#d0743c\", \"#635222\", \"#6ada6a\",\n \"#0c6197\", \"#7d9058\", \"#207f33\", \"#44b9b0\", \"#bca44a\", \"#e4a14b\", \"#a3acb2\", \"#8cc3e9\", \"#69a6f9\", \"#5b388f\",\n \"#546e91\", \"#8bde95\", \"#d2ab58\", \"#273c71\", \"#98bf6e\", \"#4daa4b\", \"#98abc5\", \"#cc1010\", \"#31383b\", \"#006391\",\n \"#c2643f\", \"#b0a474\", \"#a5a39c\", \"#a9c2bc\", \"#22af8c\", \"#7fcecf\", \"#987ac6\", \"#3d3b87\", \"#b77b1c\", \"#c9c2b6\",\n \"#807ece\", \"#8db27c\", \"#be66a2\", \"#9ed3c6\", \"#00644b\", \"#005064\", \"#77979f\", \"#77e079\", \"#9c73ab\", \"#1f79a7\"\n ],\n segmentStroke: \"#ffffff\"\n },\n gradient: {\n enabled: false,\n percentage: 95,\n color: \"#000000\"\n },\n canvasPadding: {\n top: 5,\n right: 5,\n bottom: 5,\n left: 5\n },\n pieCenterOffset: {\n x: 0,\n y: 0\n },\n cssPrefix: null\n },\n callbacks: {\n onload: null,\n onMouseoverSegment: null,\n onMouseoutSegment: null,\n onClickSegment: null\n }\n};\n\n //// --------- validate.js -----------\nvar validate = {\n\n // called whenever a new pie chart is created\n initialCheck: function(pie) {\n var cssPrefix = pie.cssPrefix;\n var element = pie.element;\n var options = pie.options;\n\n // confirm d3 is available [check minimum version]\n if (!window.d3 || !window.d3.hasOwnProperty(\"version\")) {\n console.error(\"d3pie error: d3 is not available\");\n return false;\n }\n\n // confirm element is either a DOM element or a valid string for a DOM element\n if (!(element instanceof HTMLElement || element instanceof SVGElement)) {\n console.error(\"d3pie error: the first d3pie() param must be a valid DOM element (not jQuery) or a ID string.\");\n return false;\n }\n\n // confirm the CSS prefix is valid. It has to start with a-Z and contain nothing but a-Z0-9_-\n if (!(/[a-zA-Z][a-zA-Z0-9_-]*$/.test(cssPrefix))) {\n console.error(\"d3pie error: invalid options.misc.cssPrefix\");\n return false;\n }\n\n // confirm some data has been supplied\n if (!helpers.isArray(options.data.content)) {\n console.error(\"d3pie error: invalid config structure: missing data.content property.\");\n return false;\n }\n if (options.data.content.length === 0) {\n console.error(\"d3pie error: no data supplied.\");\n return false;\n }\n\n // clear out any invalid data. Each data row needs a valid positive number and a label\n var data = [];\n for (var i=0; i<options.data.content.length; i++) {\n if (typeof options.data.content[i].value !== \"number\" || isNaN(options.data.content[i].value)) {\n console.log(\"not valid: \", options.data.content[i]);\n continue;\n }\n if (options.data.content[i].value <= 0) {\n console.log(\"not valid - should have positive value: \", options.data.content[i]);\n continue;\n }\n data.push(options.data.content[i]);\n }\n pie.options.data.content = data;\n\n // labels.outer.hideWhenLessThanPercentage - 1-100\n // labels.inner.hideWhenLessThanPercentage - 1-100\n\n return true;\n }\n};\n\n //// --------- helpers.js -----------\nvar helpers = {\n\n // creates the SVG element\n addSVGSpace: function(pie) {\n var element = pie.element;\n var canvasWidth = pie.options.size.canvasWidth;\n var canvasHeight = pie.options.size.canvasHeight;\n var backgroundColor = pie.options.misc.colors.background;\n\n var svg = d3.select(element).append(\"svg:svg\")\n .attr(\"width\", canvasWidth)\n .attr(\"height\", canvasHeight);\n\n if (backgroundColor !== \"transparent\") {\n svg.style(\"background-color\", function() { return backgroundColor; });\n }\n\n return svg;\n },\n\n shuffleArray: function(array) {\n var currentIndex = array.length, tmpVal, randomIndex;\n\n while (0 !== currentIndex) {\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n\n // and swap it with the current element\n tmpVal = array[currentIndex];\n array[currentIndex] = array[randomIndex];\n array[randomIndex] = tmpVal;\n }\n return array;\n },\n\n processObj: function(obj, is, value) {\n if (typeof is === 'string') {\n return helpers.processObj(obj, is.split('.'), value);\n } else if (is.length === 1 && value !== undefined) {\n obj[is[0]] = value;\n return obj[is[0]];\n } else if (is.length === 0) {\n return obj;\n } else {\n return helpers.processObj(obj[is[0]], is.slice(1), value);\n }\n },\n\n getDimensions: function(el) {\n if(typeof el === 'string')\n el = document.getElementById(el);\n\n var w = 0, h = 0;\n if (el) {\n var dimensions = el.getBBox();\n w = dimensions.width;\n h = dimensions.height;\n }\n else {\n console.log(\"error: getDimensions() \" + id + \" not found.\");\n }\n\n return { w: w, h: h };\n },\n\n /**\n * This is based on the SVG coordinate system, where top-left is 0,0 and bottom right is n-n.\n * @param r1\n * @param r2\n * @returns {boolean}\n */\n rectIntersect: function(r1, r2) {\n var returnVal = (\n // r2.left > r1.right\n (r2.x > (r1.x + r1.w)) ||\n\n // r2.right < r1.left\n ((r2.x + r2.w) < r1.x) ||\n\n // r2.top < r1.bottom\n ((r2.y + r2.h) < r1.y) ||\n\n // r2.bottom > r1.top\n (r2.y > (r1.y + r1.h))\n );\n\n return !returnVal;\n },\n\n /**\n * Returns a lighter/darker shade of a hex value, based on a luminance value passed.\n * @param hex a hex color value such as “#abc” or “#123456″ (the hash is optional)\n * @param lum the luminosity factor: -0.1 is 10% darker, 0.2 is 20% lighter, etc.\n * @returns {string}\n */\n getColorShade: function(hex, lum) {\n\n // validate hex string\n hex = String(hex).replace(/[^0-9a-f]/gi, '');\n if (hex.length < 6) {\n hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n }\n lum = lum || 0;\n\n // convert to decimal and change luminosity\n var newHex = \"#\";\n for (var i=0; i<3; i++) {\n var c = parseInt(hex.substr(i * 2, 2), 16);\n c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);\n newHex += (\"00\" + c).substr(c.length);\n }\n\n return newHex;\n },\n\n /**\n * Users can choose to specify segment colors in three ways (in order of precedence):\n * \t1. include a \"color\" attribute for each row in data.content\n * \t2. include a misc.colors.segments property which contains an array of hex codes\n * \t3. specify nothing at all and rely on this lib provide some reasonable defaults\n *\n * This function sees what's included and populates this.options.colors with whatever's required\n * for this pie chart.\n * @param data\n */\n initSegmentColors: function(pie) {\n var data = pie.options.data.content;\n var colors = pie.options.misc.colors.segments;\n\n // TODO this needs a ton of error handling\n\n var finalColors = [];\n for (var i=0; i<data.length; i++) {\n if (data[i].hasOwnProperty(\"color\")) {\n finalColors.push(data[i].color);\n } else {\n finalColors.push(colors[i]);\n }\n }\n\n return finalColors;\n },\n\n applySmallSegmentGrouping: function(data, smallSegmentGrouping) {\n var totalSize;\n if (smallSegmentGrouping.valueType === \"percentage\") {\n totalSize = math.getTotalPieSize(data);\n }\n\n // loop through each data item\n var newData = [];\n var groupedData = [];\n var totalGroupedData = 0;\n for (var i=0; i<data.length; i++) {\n if (smallSegmentGrouping.valueType === \"percentage\") {\n var dataPercent = (data[i].value / totalSize) * 100;\n if (dataPercent <= smallSegmentGrouping.value) {\n groupedData.push(data[i]);\n totalGroupedData += data[i].value;\n continue;\n }\n data[i].isGrouped = false;\n newData.push(data[i]);\n } else {\n if (data[i].value <= smallSegmentGrouping.value) {\n groupedData.push(data[i]);\n totalGroupedData += data[i].value;\n continue;\n }\n data[i].isGrouped = false;\n newData.push(data[i]);\n }\n }\n\n // we're done! See if there's any small segment groups to add\n if (groupedData.length) {\n newData.push({\n color: smallSegmentGrouping.color,\n label: smallSegmentGrouping.label,\n value: totalGroupedData,\n isGrouped: true,\n groupedData: groupedData\n });\n }\n\n return newData;\n },\n\n // for debugging\n showPoint: function(svg, x, y) {\n svg.append(\"circle\").attr(\"cx\", x).attr(\"cy\", y).attr(\"r\", 2).style(\"fill\", \"black\");\n },\n\n isFunction: function(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n },\n\n isArray: function(o) {\n return Object.prototype.toString.call(o) === '[object Array]';\n }\n};\n\n\n// taken from jQuery\nvar extend = function() {\n var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n deep = false,\n toString = Object.prototype.toString,\n hasOwn = Object.prototype.hasOwnProperty,\n class2type = {\n \"[object Boolean]\": \"boolean\",\n \"[object Number]\": \"number\",\n \"[object String]\": \"string\",\n \"[object Function]\": \"function\",\n \"[object Array]\": \"array\",\n \"[object Date]\": \"date\",\n \"[object RegExp]\": \"regexp\",\n \"[object Object]\": \"object\"\n },\n\n jQuery = {\n isFunction: function (obj) {\n return jQuery.type(obj) === \"function\";\n },\n isArray: Array.isArray ||\n function (obj) {\n return jQuery.type(obj) === \"array\";\n },\n isWindow: function (obj) {\n return obj !== null && obj === obj.window;\n },\n isNumeric: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n type: function (obj) {\n return obj === null ? String(obj) : class2type[toString.call(obj)] || \"object\";\n },\n isPlainObject: function (obj) {\n if (!obj || jQuery.type(obj) !== \"object\" || obj.nodeType) {\n return false;\n }\n try {\n if (obj.constructor && !hasOwn.call(obj, \"constructor\") && !hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\")) {\n return false;\n }\n } catch (e) {\n return false;\n }\n var key;\n for (key in obj) {}\n return key === undefined || hasOwn.call(obj, key);\n }\n };\n if (typeof target === \"boolean\") {\n deep = target;\n target = arguments[1] || {};\n i = 2;\n }\n if (typeof target !== \"object\" && !jQuery.isFunction(target)) {\n target = {};\n }\n if (length === i) {\n target = this;\n --i;\n }\n for (i; i < length; i++) {\n if ((options = arguments[i]) !== null) {\n for (name in options) {\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n // WARNING: RECURSION\n target[name] = extend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n};\n //// --------- math.js -----------\nvar math = {\n\n toRadians: function(degrees) {\n return degrees * (Math.PI / 180);\n },\n\n toDegrees: function(radians) {\n return radians * (180 / Math.PI);\n },\n\n computePieRadius: function(pie) {\n var size = pie.options.size;\n var canvasPadding = pie.options.misc.canvasPadding;\n\n // outer radius is either specified (e.g. through the generator), or omitted altogether\n // and calculated based on the canvas dimensions. Right now the estimated version isn't great - it should\n // be possible to calculate it to precisely generate the maximum sized pie, but it's fussy as heck. Something\n // for the next release.\n\n // first, calculate the default _outerRadius\n var w = size.canvasWidth - canvasPadding.left - canvasPadding.right;\n var h = size.canvasHeight - canvasPadding.top - canvasPadding.bottom;\n\n // now factor in the footer, title & subtitle\n if (pie.options.header.location !== \"pie-center\") {\n h -= pie.textComponents.headerHeight;\n }\n\n if (pie.textComponents.footer.exists) {\n h -= pie.textComponents.footer.h;\n }\n\n // for really teeny pies, h may be < 0. Adjust it back\n h = (h < 0) ? 0 : h;\n\n var outerRadius = ((w < h) ? w : h) / 3;\n var innerRadius, percent;\n\n // if the user specified something, use that instead\n if (size.pieOuterRadius !== null) {\n if (/%/.test(size.pieOuterRadius)) {\n percent = parseInt(size.pieOuterRadius.replace(/[\\D]/, \"\"), 10);\n percent = (percent > 99) ? 99 : percent;\n percent = (percent < 0) ? 0 : percent;\n\n var smallestDimension = (w < h) ? w : h;\n\n // now factor in the label line size\n if (pie.options.labels.outer.format !== \"none\") {\n var pieDistanceSpace = parseInt(pie.options.labels.outer.pieDistance, 10) * 2;\n if (smallestDimension - pieDistanceSpace > 0) {\n smallestDimension -= pieDistanceSpace;\n }\n }\n\n outerRadius = Math.floor((smallestDimension / 100) * percent) / 2;\n } else {\n outerRadius = parseInt(size.pieOuterRadius, 10);\n }\n }\n\n // inner radius\n if (/%/.test(size.pieInnerRadius)) {\n percent = parseInt(size.pieInnerRadius.replace(/[\\D]/, \"\"), 10);\n percent = (percent > 99) ? 99 : percent;\n percent = (percent < 0) ? 0 : percent;\n innerRadius = Math.floor((outerRadius / 100) * percent);\n } else {\n innerRadius = parseInt(size.pieInnerRadius, 10);\n }\n\n pie.innerRadius = innerRadius;\n pie.outerRadius = outerRadius;\n },\n\n getTotalPieSize: function(data) {\n var totalSize = 0;\n for (var i=0; i<data.length; i++) {\n totalSize += data[i].value;\n }\n return totalSize;\n },\n\n sortPieData: function(pie) {\n var data = pie.options.data.content;\n var sortOrder = pie.options.data.sortOrder;\n\n switch (sortOrder) {\n case \"none\":\n // do nothing\n break;\n case \"random\":\n data = helpers.shuffleArray(data);\n break;\n case \"value-asc\":\n data.sort(function(a, b) { return (a.value < b.value) ? -1 : 1; });\n break;\n case \"value-desc\":\n data.sort(function(a, b) { return (a.value < b.value) ? 1 : -1; });\n break;\n case \"label-asc\":\n data.sort(function(a, b) { return (a.label.toLowerCase() > b.label.toLowerCase()) ? 1 : -1; });\n break;\n case \"label-desc\":\n data.sort(function(a, b) { return (a.label.toLowerCase() < b.label.toLowerCase()) ? 1 : -1; });\n break;\n }\n\n return data;\n },\n\n // var pieCenter = math.getPieCenter();\n getPieTranslateCenter: function(pieCenter) {\n return \"translate(\" + pieCenter.x + \",\" + pieCenter.y + \")\";\n },\n\n /**\n * Used to determine where on the canvas the center of the pie chart should be. It takes into account the\n * height and position of the title, subtitle and footer, and the various paddings.\n * @private\n */\n calculatePieCenter: function(pie) {\n var pieCenterOffset = pie.options.misc.pieCenterOffset;\n var hasTopTitle = (pie.textComponents.title.exists && pie.options.header.location !== \"pie-center\");\n var hasTopSubtitle = (pie.textComponents.subtitle.exists && pie.options.header.location !== \"pie-center\");\n\n var headerOffset = pie.options.misc.canvasPadding.top;\n if (hasTopTitle && hasTopSubtitle) {\n headerOffset += pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n } else if (hasTopTitle) {\n headerOffset += pie.textComponents.title.h;\n } else if (hasTopSubtitle) {\n headerOffset += pie.textComponents.subtitle.h;\n }\n\n var footerOffset = 0;\n if (pie.textComponents.footer.exists) {\n footerOffset = pie.textComponents.footer.h + pie.options.misc.canvasPadding.bottom;\n }\n\n var x = ((pie.options.size.canvasWidth - pie.options.misc.canvasPadding.left - pie.options.misc.canvasPadding.right) / 2) + pie.options.misc.canvasPadding.left;\n var y = ((pie.options.size.canvasHeight - footerOffset - headerOffset) / 2) + headerOffset;\n\n x += pieCenterOffset.x;\n y += pieCenterOffset.y;\n\n pie.pieCenter = { x: x, y: y };\n },\n\n\n /**\n * Rotates a point (x, y) around an axis (xm, ym) by degrees (a).\n * @param x\n * @param y\n * @param xm\n * @param ym\n * @param a angle in degrees\n * @returns {Array}\n */\n rotate: function(x, y, xm, ym, a) {\n\n a = a * Math.PI / 180; // convert to radians\n\n var cos = Math.cos,\n sin = Math.sin,\n // subtract midpoints, so that midpoint is translated to origin and add it in the end again\n xr = (x - xm) * cos(a) - (y - ym) * sin(a) + xm,\n yr = (x - xm) * sin(a) + (y - ym) * cos(a) + ym;\n\n return { x: xr, y: yr };\n },\n\n /**\n * Translates a point x, y by distance d, and by angle a.\n * @param x\n * @param y\n * @param dist\n * @param a angle in degrees\n */\n translate: function(x, y, d, a) {\n var rads = math.toRadians(a);\n return {\n x: x + d * Math.sin(rads),\n y: y - d * Math.cos(rads)\n };\n },\n\n // from: http://stackoverflow.com/questions/19792552/d3-put-arc-labels-in-a-pie-chart-if-there-is-enough-space\n pointIsInArc: function(pt, ptData, d3Arc) {\n // Center of the arc is assumed to be 0,0\n // (pt.x, pt.y) are assumed to be relative to the center\n var r1 = d3Arc.innerRadius()(ptData), // Note: Using the innerRadius\n r2 = d3Arc.outerRadius()(ptData),\n theta1 = d3Arc.startAngle()(ptData),\n theta2 = d3Arc.endAngle()(ptData);\n\n var dist = pt.x * pt.x + pt.y * pt.y,\n angle = Math.atan2(pt.x, -pt.y); // Note: different coordinate system\n\n angle = (angle < 0) ? (angle + Math.PI * 2) : angle;\n\n return (r1 * r1 <= dist) && (dist <= r2 * r2) &&\n (theta1 <= angle) && (angle <= theta2);\n }\n};\n\n //// --------- labels.js -----------\nvar labels = {\n\n /**\n * Adds the labels to the pie chart, but doesn't position them. There are two locations for the\n * labels: inside (center) of the segments, or outside the segments on the edge.\n * @param section \"inner\" or \"outer\"\n * @param sectionDisplayType \"percentage\", \"value\", \"label\", \"label-value1\", etc.\n * @param pie\n */\n add: function(pie, section, sectionDisplayType) {\n var include = labels.getIncludes(sectionDisplayType);\n var settings = pie.options.labels;\n\n // group the label groups (label, percentage, value) into a single element for simpler positioning\n var outerLabel = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"labels-\" + section)\n .attr(\"class\", pie.cssPrefix + \"labels-\" + section);\n\n var labelGroup = pie.__labels[section] = outerLabel.selectAll(\".\" + pie.cssPrefix + \"labelGroup-\" + section)\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"labelGroup\" + i + \"-\" + section; })\n .attr(\"data-index\", function(d, i) { return i; })\n .attr(\"class\", pie.cssPrefix + \"labelGroup-\" + section)\n .style(\"opacity\", 0);\n\n var formatterContext = { section: section, sectionDisplayType: sectionDisplayType };\n\n // 1. Add the main label\n if (include.mainLabel) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentMainLabel\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentMainLabel-\" + section)\n .text(function(d, i) {\n var str = d.label;\n\n // if a custom formatter has been defined, pass it the raw label string - it can do whatever it wants with it.\n // we only apply truncation if it's not defined\n if (settings.formatter) {\n formatterContext.index = i;\n formatterContext.part = 'mainLabel';\n formatterContext.value = d.value;\n formatterContext.label = str;\n str = settings.formatter(formatterContext);\n } else if (settings.truncation.enabled && d.label.length > settings.truncation.truncateLength) {\n str = d.label.substring(0, settings.truncation.truncateLength) + \"...\";\n }\n return str;\n })\n .style(\"font-size\", settings.mainLabel.fontSize + \"px\")\n .style(\"font-family\", settings.mainLabel.font)\n .style(\"font-weight\", settings.mainLabel.fontWeight)\n .style(\"fill\", function(d, i) {\n return (settings.mainLabel.color === \"segment\") ? pie.options.colors[i] : settings.mainLabel.color;\n });\n }\n\n // 2. Add the percentage label\n if (include.percentage) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentPercentage\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentPercentage-\" + section)\n .text(function(d, i) {\n var percentage = d.percentage;\n if (settings.formatter) {\n formatterContext.index = i;\n formatterContext.part = \"percentage\";\n formatterContext.value = d.value;\n formatterContext.label = d.percentage;\n percentage = settings.formatter(formatterContext);\n } else {\n percentage += \"%\";\n }\n return percentage;\n })\n .style(\"font-size\", settings.percentage.fontSize + \"px\")\n .style(\"font-family\", settings.percentage.font)\n .style(\"font-weight\", settings.percentage.fontWeight)\n .style(\"fill\", settings.percentage.color);\n }\n\n // 3. Add the value label\n if (include.value) {\n labelGroup.append(\"text\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segmentValue\" + i + \"-\" + section; })\n .attr(\"class\", pie.cssPrefix + \"segmentValue-\" + section)\n .text(function(d, i) {\n formatterContext.index = i;\n formatterContext.part = \"value\";\n formatterContext.value = d.value;\n formatterContext.label = d.value;\n return settings.formatter ? settings.formatter(formatterContext, d.value) : d.value;\n })\n .style(\"font-size\", settings.value.fontSize + \"px\")\n .style(\"font-family\", settings.value.font)\n .style(\"font-weight\", settings.value.fontWeight)\n .style(\"fill\", settings.value.color);\n }\n },\n\n /**\n * @param section \"inner\" / \"outer\"\n */\n positionLabelElements: function(pie, section, sectionDisplayType) {\n labels[\"dimensions-\" + section] = [];\n\n // get the latest widths, heights\n var labelGroups = pie.__labels[section];\n labelGroups.each(function(d, i) {\n var mainLabel = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentMainLabel-\" + section);\n var percentage = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section);\n var value = d3.select(this).selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section);\n\n labels[\"dimensions-\" + section].push({\n mainLabel: (mainLabel.node() !== null) ? mainLabel.node().getBBox() : null,\n percentage: (percentage.node() !== null) ? percentage.node().getBBox() : null,\n value: (value.node() !== null) ? value.node().getBBox() : null\n });\n });\n\n var singleLinePad = 5;\n var dims = labels[\"dimensions-\" + section];\n switch (sectionDisplayType) {\n case \"label-value1\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n break;\n case \"label-value2\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentValue-\" + section)\n .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n break;\n case \"label-percentage1\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n .attr(\"dx\", function(d, i) { return dims[i].mainLabel.width + singleLinePad; });\n break;\n case \"label-percentage2\":\n pie.svg.selectAll(\".\" + pie.cssPrefix + \"segmentPercentage-\" + section)\n .attr(\"dx\", function(d, i) { return (dims[i].mainLabel.width / 2) - (dims[i].percentage.width / 2); })\n .attr(\"dy\", function(d, i) { return dims[i].mainLabel.height; });\n break;\n }\n },\n\n computeLabelLinePositions: function(pie) {\n pie.lineCoordGroups = [];\n pie.__labels.outer\n .each(function(d, i) { return labels.computeLinePosition(pie, i); });\n },\n\n computeLinePosition: function(pie, i) {\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n var originCoords = math.rotate(pie.pieCenter.x, pie.pieCenter.y - pie.outerRadius, pie.pieCenter.x, pie.pieCenter.y, angle);\n var heightOffset = pie.outerLabelGroupData[i].h / 5; // TODO check\n var labelXMargin = 6; // the x-distance of the label from the end of the line [TODO configurable]\n\n var quarter = Math.floor(angle / 90);\n var midPoint = 4;\n var x2, y2, x3, y3;\n\n // this resolves an issue when the\n if (quarter === 2 && angle === 180) {\n quarter = 1;\n }\n\n switch (quarter) {\n case 0:\n x2 = pie.outerLabelGroupData[i].x - labelXMargin - ((pie.outerLabelGroupData[i].x - labelXMargin - originCoords.x) / 2);\n y2 = pie.outerLabelGroupData[i].y + ((originCoords.y - pie.outerLabelGroupData[i].y) / midPoint);\n x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 1:\n x2 = originCoords.x + (pie.outerLabelGroupData[i].x - originCoords.x) / midPoint;\n y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x - labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 2:\n var startOfLabelX = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n x2 = originCoords.x - (originCoords.x - startOfLabelX) / midPoint;\n y2 = originCoords.y + (pie.outerLabelGroupData[i].y - originCoords.y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n case 3:\n var startOfLabel = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n x2 = startOfLabel + ((originCoords.x - startOfLabel) / midPoint);\n y2 = pie.outerLabelGroupData[i].y + (originCoords.y - pie.outerLabelGroupData[i].y) / midPoint;\n x3 = pie.outerLabelGroupData[i].x + pie.outerLabelGroupData[i].w + labelXMargin;\n y3 = pie.outerLabelGroupData[i].y - heightOffset;\n break;\n }\n\n /*\n * x1 / y1: the x/y coords of the start of the line, at the mid point of the segments arc on the pie circumference\n * x2 / y2: if \"curved\" line style is being used, this is the midpoint of the line. Other\n * x3 / y3: the end of the line; closest point to the label\n */\n if (pie.options.labels.lines.style === \"straight\") {\n pie.lineCoordGroups[i] = [\n { x: originCoords.x, y: originCoords.y },\n { x: x3, y: y3 }\n ];\n } else {\n pie.lineCoordGroups[i] = [\n { x: originCoords.x, y: originCoords.y },\n { x: x2, y: y2 },\n { x: x3, y: y3 }\n ];\n }\n },\n\n addLabelLines: function(pie) {\n var lineGroups = pie.svg.insert(\"g\", \".\" + pie.cssPrefix + \"pieChart\") // meaning, BEFORE .pieChart\n .attr(\"class\", pie.cssPrefix + \"lineGroups\")\n .style(\"opacity\", 1);\n\n var lineGroup = lineGroups.selectAll(\".\" + pie.cssPrefix + \"lineGroup\")\n .data(pie.lineCoordGroups)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"lineGroup\");\n\n var lineFunction = d3.line()\n .curve(d3.curveBasis)\n .x(function(d) { return d.x; })\n .y(function(d) { return d.y; });\n\n lineGroup.append(\"path\")\n .attr(\"d\", lineFunction)\n .attr(\"stroke\", function(d, i) {\n return (pie.options.labels.lines.color === \"segment\") ? pie.options.colors[i] : pie.options.labels.lines.color;\n })\n .attr(\"stroke-width\", 1)\n .attr(\"fill\", \"none\")\n .style(\"opacity\", function(d, i) {\n var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n var isHidden = (percentage !== null && d.percentage < percentage) || pie.options.data.content[i].label === \"\";\n return isHidden ? 0 : 1;\n });\n },\n\n positionLabelGroups: function(pie, section) {\n if (pie.options.labels[section].format === \"none\")\n return;\n\n pie.__labels[section]\n .style(\"opacity\", function(d, i) {\n var percentage = pie.options.labels[section].hideWhenLessThanPercentage;\n return (percentage !== null && d.percentage < percentage) ? 0 : 1;\n })\n .attr(\"transform\", function(d, i) {\n var x, y;\n if (section === \"outer\") {\n x = pie.outerLabelGroupData[i].x;\n y = pie.outerLabelGroupData[i].y;\n } else {\n var pieCenterCopy = extend(true, {}, pie.pieCenter);\n\n // now recompute the \"center\" based on the current _innerRadius\n if (pie.innerRadius > 0) {\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n var newCoords = math.translate(pie.pieCenter.x, pie.pieCenter.y, pie.innerRadius, angle);\n pieCenterCopy.x = newCoords.x;\n pieCenterCopy.y = newCoords.y;\n }\n\n var dims = helpers.getDimensions(pie.cssPrefix + \"labelGroup\" + i + \"-inner\");\n var xOffset = dims.w / 2;\n var yOffset = dims.h / 4; // confusing! Why 4? should be 2, but it doesn't look right\n\n x = pieCenterCopy.x + (pie.lineCoordGroups[i][0].x - pieCenterCopy.x) / 1.8;\n y = pieCenterCopy.y + (pie.lineCoordGroups[i][0].y - pieCenterCopy.y) / 1.8;\n\n x = x - xOffset;\n y = y + yOffset;\n }\n\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n\n getIncludes: function(val) {\n var addMainLabel = false;\n var addValue = false;\n var addPercentage = false;\n\n switch (val) {\n case \"label\":\n addMainLabel = true;\n break;\n case \"value\":\n addValue = true;\n break;\n case \"percentage\":\n addPercentage = true;\n break;\n case \"label-value1\":\n case \"label-value2\":\n addMainLabel = true;\n addValue = true;\n break;\n case \"label-percentage1\":\n case \"label-percentage2\":\n addMainLabel = true;\n addPercentage = true;\n break;\n }\n return {\n mainLabel: addMainLabel,\n value: addValue,\n percentage: addPercentage\n };\n },\n\n\n /**\n * This does the heavy-lifting to compute the actual coordinates for the outer label groups. It does two things:\n * 1. Make a first pass and position them in the ideal positions, based on the pie sizes\n * 2. Do some basic collision avoidance.\n */\n computeOuterLabelCoords: function(pie) {\n\n // 1. figure out the ideal positions for the outer labels\n pie.__labels.outer\n .each(function(d, i) {\n return labels.getIdealOuterLabelPositions(pie, i);\n });\n\n // 2. now adjust those positions to try to accommodate conflicts\n labels.resolveOuterLabelCollisions(pie);\n },\n\n /**\n * This attempts to resolve label positioning collisions.\n */\n resolveOuterLabelCollisions: function(pie) {\n if (pie.options.labels.outer.format === \"none\") {\n return;\n }\n\n var size = pie.options.data.content.length;\n labels.checkConflict(pie, 0, \"clockwise\", size);\n labels.checkConflict(pie, size-1, \"anticlockwise\", size);\n },\n\n checkConflict: function(pie, currIndex, direction, size) {\n var i, curr;\n\n if (size <= 1) {\n return;\n }\n\n var currIndexHemisphere = pie.outerLabelGroupData[currIndex].hs;\n if (direction === \"clockwise\" && currIndexHemisphere !== \"right\") {\n return;\n }\n if (direction === \"anticlockwise\" && currIndexHemisphere !== \"left\") {\n return;\n }\n var nextIndex = (direction === \"clockwise\") ? currIndex+1 : currIndex-1;\n\n // this is the current label group being looked at. We KNOW it's positioned properly (the first item\n // is always correct)\n var currLabelGroup = pie.outerLabelGroupData[currIndex];\n\n // this one we don't know about. That's the one we're going to look at and move if necessary\n var examinedLabelGroup = pie.outerLabelGroupData[nextIndex];\n\n var info = {\n labelHeights: pie.outerLabelGroupData[0].h,\n center: pie.pieCenter,\n lineLength: (pie.outerRadius + pie.options.labels.outer.pieDistance),\n heightChange: pie.outerLabelGroupData[0].h + 1 // 1 = padding\n };\n\n // loop through *ALL* label groups examined so far to check for conflicts. This is because when they're\n // very tightly fitted, a later label group may still appear high up on the page\n if (direction === \"clockwise\") {\n i = 0;\n for (; i<=currIndex; i++) {\n curr = pie.outerLabelGroupData[i];\n\n // if there's a conflict with this label group, shift the label to be AFTER the last known\n // one that's been properly placed\n if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n break;\n }\n }\n } else {\n i = size - 1;\n for (; i >= currIndex; i--) {\n curr = pie.outerLabelGroupData[i];\n\n // if there's a conflict with this label group, shift the label to be AFTER the last known\n // one that's been properly placed\n if (!labels.isLabelHidden(pie, i) && helpers.rectIntersect(curr, examinedLabelGroup)) {\n labels.adjustLabelPos(pie, nextIndex, currLabelGroup, info);\n break;\n }\n }\n }\n labels.checkConflict(pie, nextIndex, direction, size);\n },\n\n isLabelHidden: function(pie, index) {\n var percentage = pie.options.labels.outer.hideWhenLessThanPercentage;\n return (percentage !== null && d.percentage < percentage) || pie.options.data.content[index].label === \"\";\n },\n\n // does a little math to shift a label into a new position based on the last properly placed one\n adjustLabelPos: function(pie, nextIndex, lastCorrectlyPositionedLabel, info) {\n var xDiff, yDiff, newXPos, newYPos;\n newYPos = lastCorrectlyPositionedLabel.y + info.heightChange;\n yDiff = info.center.y - newYPos;\n\n if (Math.abs(info.lineLength) > Math.abs(yDiff)) {\n xDiff = Math.sqrt((info.lineLength * info.lineLength) - (yDiff * yDiff));\n } else {\n xDiff = Math.sqrt((yDiff * yDiff) - (info.lineLength * info.lineLength));\n }\n\n if (lastCorrectlyPositionedLabel.hs === \"right\") {\n newXPos = info.center.x + xDiff;\n } else {\n newXPos = info.center.x - xDiff - pie.outerLabelGroupData[nextIndex].w;\n }\n\n pie.outerLabelGroupData[nextIndex].x = newXPos;\n pie.outerLabelGroupData[nextIndex].y = newYPos;\n },\n\n /**\n * @param i 0-N where N is the dataset size - 1.\n */\n getIdealOuterLabelPositions: function(pie, i) {\n var labelGroupNode = pie.svg.select(\"#\" + pie.cssPrefix + \"labelGroup\" + i + \"-outer\").node();\n if (!labelGroupNode) return;\n\n var labelGroupDims = labelGroupNode.getBBox();\n var angle = segments.getSegmentAngle(i, pie.options.data.content, pie.totalSize, { midpoint: true });\n\n var originalX = pie.pieCenter.x;\n var originalY = pie.pieCenter.y - (pie.outerRadius + pie.options.labels.outer.pieDistance);\n var newCoords = math.rotate(originalX, originalY, pie.pieCenter.x, pie.pieCenter.y, angle);\n\n // if the label is on the left half of the pie, adjust the values\n var hemisphere = \"right\"; // hemisphere\n if (angle > 180) {\n newCoords.x -= (labelGroupDims.width + 8);\n hemisphere = \"left\";\n } else {\n newCoords.x += 8;\n }\n\n pie.outerLabelGroupData[i] = {\n x: newCoords.x,\n y: newCoords.y,\n w: labelGroupDims.width,\n h: labelGroupDims.height,\n hs: hemisphere\n };\n }\n};\n\n //// --------- segments.js -----------\nvar segments = {\n\n effectMap: {\n \"none\": d3.easeLinear,\n \"bounce\": d3.easeBounce,\n \"linear\": d3.easeLinear,\n \"sin\": d3.easeSin,\n \"elastic\": d3.easeElastic,\n \"back\": d3.easeBack,\n \"quad\": d3.easeQuad,\n \"circle\": d3.easeCircle,\n \"exp\": d3.easeExp\n },\n\n /**\n * Creates the pie chart segments and displays them according to the desired load effect.\n * @private\n */\n create: function(pie) {\n var pieCenter = pie.pieCenter;\n var colors = pie.options.colors;\n var loadEffects = pie.options.effects.load;\n var segmentStroke = pie.options.misc.colors.segmentStroke;\n\n // we insert the pie chart BEFORE the title, to ensure the title overlaps the pie\n var pieChartElement = pie.svg.insert(\"g\", \"#\" + pie.cssPrefix + \"title\")\n .attr(\"transform\", function() { return math.getPieTranslateCenter(pieCenter); })\n .attr(\"class\", pie.cssPrefix + \"pieChart\");\n\n var arc = d3.arc()\n .innerRadius(pie.innerRadius)\n .outerRadius(pie.outerRadius)\n .startAngle(0)\n .endAngle(function(d) {\n return (d.value / pie.totalSize) * 2 * Math.PI;\n });\n\n var g = pieChartElement.selectAll(\".\" + pie.cssPrefix + \"arc\")\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"arc\");\n\n // if we're not fading in the pie, just set the load speed to 0\n //var loadSpeed = loadEffects.speed;\n //if (loadEffects.effect === \"none\") {\n //\tloadSpeed = 0;\n //}\n\n g.append(\"path\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"segment\" + i; })\n .attr(\"fill\", function(d, i) {\n var color = colors[i];\n if (pie.options.misc.gradient.enabled) {\n color = \"url(#\" + pie.cssPrefix + \"grad\" + i + \")\";\n }\n return color;\n })\n .style(\"stroke\", segmentStroke)\n .style(\"stroke-width\", 1)\n //.transition()\n //.ease(d3.easeCubicInOut)\n //.duration(loadSpeed)\n .attr(\"data-index\", function(d, i) { return i; })\n .attr(\"d\", arc);\n/*\n .attrTween(\"d\", function(b) {\n var i = d3.interpolate({ value: 0 }, b);\n return function(t) {\n var ret = pie.arc(i(t));\n console.log(ret);\n return ret;\n };\n });\n*/\n pie.svg.selectAll(\"g.\" + pie.cssPrefix + \"arc\")\n .attr(\"transform\",\n function(d, i) {\n var angle = 0;\n if (i > 0) {\n angle = segments.getSegmentAngle(i-1, pie.options.data.content, pie.totalSize);\n }\n return \"rotate(\" + angle + \")\";\n }\n );\n pie.arc = arc;\n },\n\n addGradients: function(pie) {\n var grads = pie.svg.append(\"defs\")\n .selectAll(\"radialGradient\")\n .data(pie.options.data.content)\n .enter().append(\"radialGradient\")\n .attr(\"gradientUnits\", \"userSpaceOnUse\")\n .attr(\"cx\", 0)\n .attr(\"cy\", 0)\n .attr(\"r\", \"120%\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"grad\" + i; });\n\n grads.append(\"stop\").attr(\"offset\", \"0%\").style(\"stop-color\", function(d, i) { return pie.options.colors[i]; });\n grads.append(\"stop\").attr(\"offset\", pie.options.misc.gradient.percentage + \"%\").style(\"stop-color\", pie.options.misc.gradient.color);\n },\n\n addSegmentEventHandlers: function(pie) {\n var arc = pie.svg.selectAll(\".\" + pie.cssPrefix + \"arc\");\n arc = arc.merge(pie.__labels.inner.merge(pie.__labels.outer));\n\n arc.on(\"click\", function() {\n var currentEl = d3.select(this);\n var segment;\n\n // mouseover works on both the segments AND the segment labels, hence the following\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n var index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onClickSegment, segment, isExpanded);\n if (pie.options.effects.pullOutSegmentOnClick.effect !== \"none\") {\n if (isExpanded) {\n segments.closeSegment(pie, segment.node());\n } else {\n segments.openSegment(pie, segment.node());\n }\n }\n });\n\n arc.on(\"mouseover\", function() {\n var currentEl = d3.select(this);\n var segment, index;\n\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n if (pie.options.effects.highlightSegmentOnMouseover) {\n index = segment.attr(\"data-index\");\n var segColor = pie.options.colors[index];\n segment.style(\"fill\", helpers.getColorShade(segColor, pie.options.effects.highlightLuminosity));\n }\n\n if (pie.options.tooltips.enabled) {\n index = segment.attr(\"data-index\");\n tt.showTooltip(pie, index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoverSegment, segment, isExpanded);\n });\n\n arc.on(\"mousemove\", function() {\n tt.moveTooltip(pie);\n });\n\n arc.on(\"mouseout\", function() {\n var currentEl = d3.select(this);\n var segment, index;\n\n if (currentEl.attr(\"class\") === pie.cssPrefix + \"arc\") {\n segment = currentEl.select(\"path\");\n } else {\n index = currentEl.attr(\"data-index\");\n segment = d3.select(\"#\" + pie.cssPrefix + \"segment\" + index);\n }\n\n if (pie.options.effects.highlightSegmentOnMouseover) {\n index = segment.attr(\"data-index\");\n var color = pie.options.colors[index];\n if (pie.options.misc.gradient.enabled) {\n color = \"url(#\" + pie.cssPrefix + \"grad\" + index + \")\";\n }\n segment.style(\"fill\", color);\n }\n\n if (pie.options.tooltips.enabled) {\n index = segment.attr(\"data-index\");\n tt.hideTooltip(pie, index);\n }\n\n var isExpanded = segment.attr(\"class\") === pie.cssPrefix + \"expanded\";\n segments.onSegmentEvent(pie, pie.options.callbacks.onMouseoutSegment, segment, isExpanded);\n });\n },\n\n // helper function used to call the click, mouseover, mouseout segment callback functions\n onSegmentEvent: function(pie, func, segment, isExpanded) {\n if (!helpers.isFunction(func)) {\n return;\n }\n var index = parseInt(segment.attr(\"data-index\"), 10);\n func({\n segment: segment.node(),\n index: index,\n expanded: isExpanded,\n data: pie.options.data.content[index]\n });\n },\n\n openSegment: function(pie, segment) {\n if (pie.isOpeningSegment) {\n return;\n }\n pie.isOpeningSegment = true;\n\n segments.maybeCloseOpenSegment(pie);\n\n d3.select(segment)\n .transition()\n .ease(segments.effectMap[pie.options.effects.pullOutSegmentOnClick.effect])\n .duration(pie.options.effects.pullOutSegmentOnClick.speed)\n .attr(\"transform\", function(d, i) {\n var c = pie.arc.centroid(d),\n x = c[0],\n y = c[1],\n h = Math.sqrt(x*x + y*y),\n pullOutSize = parseInt(pie.options.effects.pullOutSegmentOnClick.size, 10);\n\n return \"translate(\" + ((x/h) * pullOutSize) + ',' + ((y/h) * pullOutSize) + \")\";\n })\n .on(\"end\", function(d, i) {\n pie.currentlyOpenSegment = segment;\n pie.isOpeningSegment = false;\n d3.select(segment).attr(\"class\", pie.cssPrefix + \"expanded\");\n });\n },\n\n maybeCloseOpenSegment: function(pie) {\n if (typeof pie !== 'undefined' && pie.svg.selectAll(\".\" + pie.cssPrefix + \"expanded\").size() > 0) {\n segments.closeSegment(pie, pie.svg.select(\".\" + pie.cssPrefix + \"expanded\").node());\n }\n },\n\n closeSegment: function(pie, segment) {\n d3.select(segment)\n .transition()\n .duration(400)\n .attr(\"transform\", \"translate(0,0)\")\n .on(\"end\", function(d, i) {\n d3.select(segment).attr(\"class\", \"\");\n pie.currentlyOpenSegment = null;\n });\n },\n\n getCentroid: function(el) {\n var bbox = el.getBBox();\n return {\n x: bbox.x + bbox.width / 2,\n y: bbox.y + bbox.height / 2\n };\n },\n\n /**\n * General helper function to return a segment's angle, in various different ways.\n * @param index\n * @param opts optional object for fine-tuning exactly what you want.\n */\n getSegmentAngle: function(index, data, totalSize, opts) {\n var options = extend({\n // if true, this returns the full angle from the origin. Otherwise it returns the single segment angle\n compounded: true,\n\n // optionally returns the midpoint of the angle instead of the full angle\n midpoint: false\n }, opts);\n\n var currValue = data[index].value;\n var fullValue;\n if (options.compounded) {\n fullValue = 0;\n\n // get all values up to and including the specified index\n for (var i=0; i<=index; i++) {\n fullValue += data[i].value;\n }\n }\n\n if (typeof fullValue === 'undefined') {\n fullValue = currValue;\n }\n\n // now convert the full value to an angle\n var angle = (fullValue / totalSize) * 360;\n\n // lastly, if we want the midpoint, factor that sucker in\n if (options.midpoint) {\n var currAngle = (currValue / totalSize) * 360;\n angle -= (currAngle / 2);\n }\n\n return angle;\n }\n\n};\n\n //// --------- text.js -----------\nvar text = {\n offscreenCoord: -10000,\n\n addTitle: function(pie) {\n pie.__title = pie.svg.selectAll(\".\" + pie.cssPrefix + \"title\")\n .data([pie.options.header.title])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"id\", pie.cssPrefix + \"title\")\n .attr(\"class\", pie.cssPrefix + \"title\")\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"text-anchor\", function() {\n var location;\n if (pie.options.header.location === \"top-center\" || pie.options.header.location === \"pie-center\") {\n location = \"middle\";\n } else {\n location = \"left\";\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionTitle: function(pie) {\n var textComponents = pie.textComponents;\n var headerLocation = pie.options.header.location;\n var canvasPadding = pie.options.misc.canvasPadding;\n var canvasWidth = pie.options.size.canvasWidth;\n var titleSubtitlePadding = pie.options.header.titleSubtitlePadding;\n\n var x;\n if (headerLocation === \"top-left\") {\n x = canvasPadding.left;\n } else {\n x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n }\n\n // add whatever offset has been added by user\n x += pie.options.misc.pieCenterOffset.x;\n\n var y = canvasPadding.top + textComponents.title.h;\n\n if (headerLocation === \"pie-center\") {\n y = pie.pieCenter.y;\n\n // still not fully correct\n if (textComponents.subtitle.exists) {\n var totalTitleHeight = textComponents.title.h + titleSubtitlePadding + textComponents.subtitle.h;\n y = y - (totalTitleHeight / 2) + textComponents.title.h;\n } else {\n y += (textComponents.title.h / 4);\n }\n }\n\n pie.__title\n .attr(\"x\", x)\n .attr(\"y\", y);\n },\n\n addSubtitle: function(pie) {\n var headerLocation = pie.options.header.location;\n\n pie.__subtitle = pie.svg.selectAll(\".\" + pie.cssPrefix + \"subtitle\")\n .data([pie.options.header.subtitle])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"id\", pie.cssPrefix + \"subtitle\")\n .attr(\"class\", pie.cssPrefix + \"subtitle\")\n .attr(\"text-anchor\", function() {\n var location;\n if (headerLocation === \"top-center\" || headerLocation === \"pie-center\") {\n location = \"middle\";\n } else {\n location = \"left\";\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionSubtitle: function(pie) {\n var canvasPadding = pie.options.misc.canvasPadding;\n var canvasWidth = pie.options.size.canvasWidth;\n\n var x;\n if (pie.options.header.location === \"top-left\") {\n x = canvasPadding.left;\n } else {\n x = ((canvasWidth - canvasPadding.right) / 2) + canvasPadding.left;\n }\n\n // add whatever offset has been added by user\n x += pie.options.misc.pieCenterOffset.x;\n\n var y = text.getHeaderHeight(pie);\n\n pie.__subtitle\n .attr(\"x\", x)\n .attr(\"y\", y);\n },\n\n addFooter: function(pie) {\n pie.__footer = pie.svg.selectAll(\".\" + pie.cssPrefix + \"footer\")\n .data([pie.options.footer])\n .enter()\n .append(\"text\")\n .text(function(d) { return d.text; })\n .attr(\"x\", text.offscreenCoord)\n .attr(\"y\", text.offscreenCoord)\n .attr(\"id\", pie.cssPrefix + \"footer\")\n .attr(\"class\", pie.cssPrefix + \"footer\")\n .attr(\"text-anchor\", function() {\n var location = \"left\";\n if (pie.options.footer.location === \"bottom-center\") {\n location = \"middle\";\n } else if (pie.options.footer.location === \"bottom-right\") {\n location = \"left\"; // on purpose. We have to change the x-coord to make it properly right-aligned\n }\n return location;\n })\n .attr(\"fill\", function(d) { return d.color; })\n .style(\"font-size\", function(d) { return d.fontSize + \"px\"; })\n .style(\"font-weight\", function(d) { return d.fontWeight; })\n .style(\"font-family\", function(d) { return d.font; });\n },\n\n positionFooter: function(pie) {\n var footerLocation = pie.options.footer.location;\n var footerWidth = pie.textComponents.footer.w;\n var canvasWidth = pie.options.size.canvasWidth;\n var canvasHeight = pie.options.size.canvasHeight;\n var canvasPadding = pie.options.misc.canvasPadding;\n\n var x;\n if (footerLocation === \"bottom-left\") {\n x = canvasPadding.left;\n } else if (footerLocation === \"bottom-right\") {\n x = canvasWidth - footerWidth - canvasPadding.right;\n } else {\n x = canvasWidth / 2; // TODO - shouldn't this also take into account padding?\n }\n\n pie.__footer\n .attr(\"x\", x)\n .attr(\"y\", canvasHeight - canvasPadding.bottom);\n },\n\n getHeaderHeight: function(pie) {\n var h;\n if (pie.textComponents.title.exists) {\n\n // if the subtitle isn't defined, it'll be set to 0\n var totalTitleHeight = pie.textComponents.title.h + pie.options.header.titleSubtitlePadding + pie.textComponents.subtitle.h;\n if (pie.options.header.location === \"pie-center\") {\n h = pie.pieCenter.y - (totalTitleHeight / 2) + totalTitleHeight;\n } else {\n h = totalTitleHeight + pie.options.misc.canvasPadding.top;\n }\n } else {\n if (pie.options.header.location === \"pie-center\") {\n var footerPlusPadding = pie.options.misc.canvasPadding.bottom + pie.textComponents.footer.h;\n h = ((pie.options.size.canvasHeight - footerPlusPadding) / 2) + pie.options.misc.canvasPadding.top + (pie.textComponents.subtitle.h / 2);\n } else {\n h = pie.options.misc.canvasPadding.top + pie.textComponents.subtitle.h;\n }\n }\n return h;\n }\n};\n\n //// --------- validate.js -----------\nvar tt = {\n addTooltips: function(pie) {\n\n // group the label groups (label, percentage, value) into a single element for simpler positioning\n var tooltips = pie.svg.insert(\"g\")\n .attr(\"class\", pie.cssPrefix + \"tooltips\");\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n .data(pie.options.data.content)\n .enter()\n .append(\"g\")\n .attr(\"class\", pie.cssPrefix + \"tooltip\")\n .attr(\"id\", function(d, i) { return pie.cssPrefix + \"tooltip\" + i; })\n .style(\"opacity\", 0)\n .append(\"rect\")\n .attr(\"rx\", pie.options.tooltips.styles.borderRadius)\n .attr(\"ry\", pie.options.tooltips.styles.borderRadius)\n .attr(\"x\", -pie.options.tooltips.styles.padding)\n .attr(\"opacity\", pie.options.tooltips.styles.backgroundOpacity)\n .style(\"fill\", pie.options.tooltips.styles.backgroundColor);\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip\")\n .data(pie.options.data.content)\n .append(\"text\")\n .attr(\"fill\", function(d) { return pie.options.tooltips.styles.color; })\n .style(\"font-size\", function(d) { return pie.options.tooltips.styles.fontSize; })\n .style(\"font-weight\", function(d) { return pie.options.tooltips.styles.fontWeight; })\n .style(\"font-family\", function(d) { return pie.options.tooltips.styles.font; })\n .text(function(d, i) {\n var caption = pie.options.tooltips.string;\n if (pie.options.tooltips.type === \"caption\") {\n caption = d.caption;\n }\n return tt.replacePlaceholders(pie, caption, i, {\n label: d.label,\n value: d.value,\n percentage: d.percentage\n });\n });\n\n tooltips.selectAll(\".\" + pie.cssPrefix + \"tooltip rect\")\n .attr(\"width\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return dims.w + (2 * pie.options.tooltips.styles.padding);\n })\n .attr(\"height\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return dims.h + (2 * pie.options.tooltips.styles.padding);\n })\n .attr(\"y\", function (d, i) {\n var dims = helpers.getDimensions(pie.cssPrefix + \"tooltip\" + i);\n return -(dims.h / 2) + 1;\n });\n },\n\n showTooltip: function(pie, index) {\n var fadeInSpeed = pie.options.tooltips.styles.fadeInSpeed;\n if (tt.currentTooltip === index) {\n fadeInSpeed = 1;\n }\n\n tt.currentTooltip = index;\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n .transition()\n .duration(fadeInSpeed)\n .style(\"opacity\", function() { return 1; });\n\n tt.moveTooltip(pie);\n },\n\n moveTooltip: function(pie) {\n d3.selectAll(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n .attr(\"transform\", function(d) {\n var mouseCoords = d3.mouse(this.parentNode);\n var x = mouseCoords[0] + pie.options.tooltips.styles.padding + 2;\n var y = mouseCoords[1] - (2 * pie.options.tooltips.styles.padding) - 2;\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n hideTooltip: function(pie, index) {\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + index)\n .style(\"opacity\", function() { return 0; });\n\n // move the tooltip offscreen. This ensures that when the user next mouseovers the segment the hidden\n // element won't interfere\n d3.select(\"#\" + pie.cssPrefix + \"tooltip\" + tt.currentTooltip)\n .attr(\"transform\", function(d, i) {\n // klutzy, but it accounts for tooltip padding which could push it onscreen\n var x = pie.options.size.canvasWidth + 1000;\n var y = pie.options.size.canvasHeight + 1000;\n return \"translate(\" + x + \",\" + y + \")\";\n });\n },\n\n replacePlaceholders: function(pie, str, index, replacements) {\n\n // if the user has defined a placeholderParser function, call it before doing the replacements\n if (helpers.isFunction(pie.options.tooltips.placeholderParser)) {\n pie.options.tooltips.placeholderParser(index, replacements);\n }\n\n var replacer = function() {\n return function(match) {\n var placeholder = arguments[1];\n if (replacements.hasOwnProperty(placeholder)) {\n return replacements[arguments[1]];\n } else {\n return arguments[0];\n }\n };\n };\n return str.replace(/\\{(\\w+)\\}/g, replacer(replacements));\n }\n};\n\n\n // --------------------------------------------------------------------------------------------\n\n // our constructor\n var d3pie = function(element, options) {\n\n // element can be an ID or DOM element\n this.element = element;\n if (typeof element === \"string\") {\n var el = element.replace(/^#/, \"\"); // replace any jQuery-like ID hash char\n this.element = document.getElementById(el);\n }\n\n var opts = {};\n extend(true, opts, defaultSettings, options);\n this.options = opts;\n\n // if the user specified a custom CSS element prefix (ID, class), use it\n if (this.options.misc.cssPrefix !== null) {\n this.cssPrefix = this.options.misc.cssPrefix;\n } else {\n this.cssPrefix = \"p\" + _uniqueIDCounter + \"_\";\n _uniqueIDCounter++;\n }\n\n\n // now run some validation on the user-defined info\n if (!validate.initialCheck(this)) {\n return;\n }\n\n // add a data-role to the DOM node to let anyone know that it contains a d3pie instance, and the d3pie version\n d3.select(this.element).attr(_scriptName, _version);\n\n // things that are done once\n _setupData.call(this);\n _init.call(this);\n };\n\n d3pie.prototype.recreate = function() {\n // now run some validation on the user-defined info\n if (!validate.initialCheck(this)) {\n return;\n }\n\n _setupData.call(this);\n _init.call(this);\n };\n\n d3pie.prototype.redraw = function() {\n this.element.innerHTML = \"\";\n _init.call(this);\n };\n\n d3pie.prototype.destroy = function() {\n this.element.innerHTML = \"\"; // clear out the SVG\n d3.select(this.element).attr(_scriptName, null); // remove the data attr\n };\n\n /**\n * Returns all pertinent info about the current open info. Returns null if nothing's open, or if one is, an object of\n * the following form:\n * \t{\n * \t element: DOM NODE,\n * \t index: N,\n * \t data: {}\n * \t}\n */\n d3pie.prototype.getOpenSegment = function() {\n var segment = this.currentlyOpenSegment;\n if (segment !== null && typeof segment !== \"undefined\") {\n var index = parseInt(d3.select(segment).attr(\"data-index\"), 10);\n return {\n element: segment,\n index: index,\n data: this.options.data.content[index]\n };\n } else {\n return null;\n }\n };\n\n d3pie.prototype.openSegment = function(index) {\n index = parseInt(index, 10);\n if (index < 0 || index > this.options.data.content.length-1) {\n return;\n }\n segments.openSegment(this, d3.select(\"#\" + this.cssPrefix + \"segment\" + index).node());\n };\n\n d3pie.prototype.closeSegment = function() {\n segments.maybeCloseOpenSegment(this);\n };\n\n // this let's the user dynamically update aspects of the pie chart without causing a complete redraw. It\n // intelligently re-renders only the part of the pie that the user specifies. Some things cause a repaint, others\n // just redraw the single element\n d3pie.prototype.updateProp = function(propKey, value) {\n switch (propKey) {\n case \"header.title.text\":\n var oldVal = helpers.processObj(this.options, propKey);\n helpers.processObj(this.options, propKey, value);\n d3.select(\"#\" + this.cssPrefix + \"title\").html(value);\n if ((oldVal === \"\" && value !== \"\") || (oldVal !== \"\" && value === \"\")) {\n this.redraw();\n }\n break;\n\n case \"header.subtitle.text\":\n var oldValue = helpers.processObj(this.options, propKey);\n helpers.processObj(this.options, propKey, value);\n d3.select(\"#\" + this.cssPrefix + \"subtitle\").html(value);\n if ((oldValue === \"\" && value !== \"\") || (oldValue !== \"\" && value === \"\")) {\n this.redraw();\n }\n break;\n\n case \"callbacks.onload\":\n case \"callbacks.onMouseoverSegment\":\n case \"callbacks.onMouseoutSegment\":\n case \"callbacks.onClickSegment\":\n case \"effects.pullOutSegmentOnClick.effect\":\n case \"effects.pullOutSegmentOnClick.speed\":\n case \"effects.pullOutSegmentOnClick.size\":\n case \"effects.highlightSegmentOnMouseover\":\n case \"effects.highlightLuminosity\":\n helpers.processObj(this.options, propKey, value);\n break;\n\n // everything else, attempt to update it & do a repaint\n default:\n helpers.processObj(this.options, propKey, value);\n\n this.destroy();\n this.recreate();\n break;\n }\n };\n\n\n // ------------------------------------------------------------------------------------------------\n\n var _setupData = function () {\n this.options.data.content = math.sortPieData(this);\n if (this.options.data.smallSegmentGrouping.enabled) {\n this.options.data.content = helpers.applySmallSegmentGrouping(this.options.data.content, this.options.data.smallSegmentGrouping);\n }\n\n\n this.options.colors = helpers.initSegmentColors(this);\n this.totalSize = math.getTotalPieSize(this.options.data.content);\n\n var dp = this.options.labels.percentage.decimalPlaces;\n\n // add in percentage data to content\n for (var i=0; i<this.options.data.content.length; i++) {\n this.options.data.content[i].percentage = _getPercentage(this.options.data.content[i].value, this.totalSize, dp);\n }\n\n // adjust the final item to ensure the percentage always adds up to precisely 100%. This is necessary\n var totalPercentage = 0;\n for (var j=0; j<this.options.data.content.length; j++) {\n if (j === this.options.data.content.length - 1) {\n this.options.data.content[j].percentage = (100 - totalPercentage).toFixed(dp);\n }\n totalPercentage += parseFloat(this.options.data.content[j].percentage);\n }\n };\n\n var _init = function() {\n\n // prep-work\n this.svg = helpers.addSVGSpace(this);\n\n // store info about the main text components as part of the d3pie object instance\n this.textComponents = {\n headerHeight: 0,\n title: {\n exists: this.options.header.title.text !== \"\",\n h: 0,\n w: 0\n },\n subtitle: {\n exists: this.options.header.subtitle.text !== \"\",\n h: 0,\n w: 0\n },\n footer: {\n exists: this.options.footer.text !== \"\",\n h: 0,\n w: 0\n }\n };\n\n this.outerLabelGroupData = [];\n\n // add the key text components offscreen (title, subtitle, footer). We need to know their widths/heights for later computation\n if (this.textComponents.title.exists) text.addTitle(this);\n if (this.textComponents.subtitle.exists) text.addSubtitle(this);\n text.addFooter(this);\n\n // console.log(this);\n\n // the footer never moves. Put it in place now\n var self = this;\n text.positionFooter(self);\n var d3 = helpers.getDimensions(self.__footer.node());\n self.textComponents.footer.h = d3.h;\n self.textComponents.footer.w = d3.w;\n\n if (self.textComponents.title.exists) {\n var d1 = helpers.getDimensions(self.__title.node());\n self.textComponents.title.h = d1.h;\n self.textComponents.title.w = d1.w;\n }\n\n if (self.textComponents.subtitle.exists) {\n var d2 = helpers.getDimensions(self.__subtitle.node());\n self.textComponents.subtitle.h = d2.h;\n self.textComponents.subtitle.w = d2.w;\n }\n\n // now compute the full header height\n if (self.textComponents.title.exists || self.textComponents.subtitle.exists) {\n var headerHeight = 0;\n if (self.textComponents.title.exists) {\n headerHeight += self.textComponents.title.h;\n if (self.textComponents.subtitle.exists) {\n headerHeight += self.options.header.titleSubtitlePadding;\n }\n }\n if (self.textComponents.subtitle.exists) {\n headerHeight += self.textComponents.subtitle.h;\n }\n self.textComponents.headerHeight = headerHeight;\n }\n\n // at this point, all main text component dimensions have been calculated\n math.computePieRadius(self);\n\n // this value is used all over the place for placing things and calculating locations. We figure it out ONCE\n // and store it as part of the object\n math.calculatePieCenter(self);\n\n // position the title and subtitle\n text.positionTitle(self);\n text.positionSubtitle(self);\n\n // now create the pie chart segments, and gradients if the user desired\n if (self.options.misc.gradient.enabled) {\n segments.addGradients(self);\n }\n segments.create(self); // also creates this.arc\n\n self.__labels = {};\n labels.add(self, \"inner\", self.options.labels.inner.format);\n labels.add(self, \"outer\", self.options.labels.outer.format);\n\n // position the label elements relatively within their individual group (label, percentage, value)\n labels.positionLabelElements(self, \"inner\", self.options.labels.inner.format);\n labels.positionLabelElements(self, \"outer\", self.options.labels.outer.format);\n labels.computeOuterLabelCoords(self);\n\n // this is (and should be) dumb. It just places the outer groups at their calculated, collision-free positions\n labels.positionLabelGroups(self, \"outer\");\n\n // we use the label line positions for many other calculations, so ALWAYS compute them\n labels.computeLabelLinePositions(self);\n\n // only add them if they're actually enabled\n if (self.options.labels.lines.enabled && self.options.labels.outer.format !== \"none\") {\n labels.addLabelLines(self);\n }\n\n labels.positionLabelGroups(self, \"inner\");\n\n if (helpers.isFunction(self.options.callbacks.onload)) {\n try {\n self.options.callbacks.onload();\n } catch (e) { }\n }\n\n // add and position the tooltips\n if (self.options.tooltips.enabled) {\n tt.addTooltips(self);\n }\n\n segments.addSegmentEventHandlers(self);\n };\n\n var _getPercentage = function(value, total, decimalPlaces) {\n var relativeAmount = value / total;\n if (decimalPlaces <= 0) {\n return Math.round(relativeAmount * 100);\n } else {\n return (relativeAmount * 100).toFixed(decimalPlaces);\n }\n };\n\n return d3pie;\n}));\n","import { 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 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 { 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]+\"&#160;\"+r;if(0===3600*l+60*h+u+.001*d||e>=G.Granularity.DAILY)return g(s)+\"&#160;\"+lt[o];if(e<G.Granularity.SECONDLY){var c=\"\"+d;return g(u)+\".\"+(\"000\"+c).substring(c.length)}return e>G.Granularity.MINUTELY?f(l,h,u,0):f(l,h,u,d)}function Z(t,e){return v(t,e(\"labelsUTC\"))}Object.defineProperty(a,\"__esModule\",{value:!0}),a.removeEvent=i,a.cancelEvent=n,a.hsvToRGB=r,a.findPos=o,a.pageX=s,a.pageY=l,a.dragGetX_=h,a.dragGetY_=u,a.isOK=d,a.isValidPoint=c,a.floatFormat=p,a.zeropad=g,a.hmsString_=f,a.dateString_=v,a.round_=_,a.binarySearch=y,a.dateParser=x,a.dateStrToMillis=m,a.update=b,a.updateDeep=w,a.isArrayLike=A,a.isDateLike=O,a.clone=D,a.createCanvas=E,a.getContextPixelRatio=L,a.Iterator=T,a.createIterator=S,a.repeatAndCleanup=P,a.isPixelChangingOptionList=C,a.detectLineDelimiter=M,a.isNodeContainedBy=N,a.pow=F,a.toRGB_=R,a.isCanvasSupported=I,a.parseFloat_=H,a.numberValueFormatter=Y,a.numberAxisLabelFormatter=X,a.dateAxisLabelFormatter=V,a.dateValueFormatter=Z;var B=t(\"./dygraph-tickers\"),G=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(B);a.LOG_SCALE=10;var W=Math.log(10);a.LN_TEN=W;var U=function(t){return Math.log(t)/W};a.log10=U;var z=function(t,e,a){var i=U(t),n=U(e),r=i+a*(n-i);return Math.pow(10,r)};a.logRangeFraction=z;var j=[2,2];a.DOTTED_LINE=j;var K=[7,3];a.DASHED_LINE=K;var q=[7,2,2,2];a.DOT_DASH_LINE=q;a.HORIZONTAL=1;a.VERTICAL=2;var Q=function(t){return t.getContext(\"2d\")};a.getContext=Q;var J=function(t,e,a){t.addEventListener(e,a,!1)};a.addEvent=J;var $={getFullYear:function(t){return t.getFullYear()},getMonth:function(t){return t.getMonth()},getDate:function(t){return t.getDate()},getHours:function(t){return t.getHours()},getMinutes:function(t){return t.getMinutes()},getSeconds:function(t){return t.getSeconds()},getMilliseconds:function(t){return t.getMilliseconds()},getDay:function(t){return t.getDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(t,e,a,i,n,r,o)}};a.DateAccessorsLocal=$;var tt={getFullYear:function(t){return t.getUTCFullYear()},getMonth:function(t){return t.getUTCMonth()},getDate:function(t){return t.getUTCDate()},getHours:function(t){return t.getUTCHours()},getMinutes:function(t){return t.getUTCMinutes()},getSeconds:function(t){return t.getUTCSeconds()},getMilliseconds:function(t){return t.getUTCMilliseconds()},getDay:function(t){return t.getUTCDay()},makeDate:function(t,e,a,i,n,r,o){return new Date(Date.UTC(t,e,a,i,n,r,o))}};a.DateAccessorsUTC=tt,T.prototype.next=function(){if(!this.hasNext)return null;for(var t=this.peek,e=this.nextIdx_+1,a=!1;e<this.end_;){if(!this.predicate_||this.predicate_(this.array_,e)){this.peek=this.array_[e],a=!0;break}e++}return this.nextIdx_=e,a||(this.hasNext=!1,this.peek=null),t};var et=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)}}();a.requestAnimFrame=et;var at={annotationClickHandler:!0,annotationDblClickHandler:!0,annotationMouseOutHandler:!0,annotationMouseOverHandler:!0,axisLineColor:!0,axisLineWidth:!0,clickCallback:!0,drawCallback:!0,drawHighlightPointCallback:!0,drawPoints:!0,drawPointCallback:!0,drawGrid:!0,fillAlpha:!0,gridLineColor:!0,gridLineWidth:!0,hideOverlayOnMouseOut:!0,highlightCallback:!0,highlightCircleSize:!0,interactionModel:!0,labelsDiv:!0,labelsKMB:!0,labelsKMG2:!0,labelsSeparateLines:!0,labelsShowZeroValues:!0,legend:!0,panEdgeFraction:!0,pixelsPerYLabel:!0,pointClickCallback:!0,pointSize:!0,rangeSelectorPlotFillColor:!0,rangeSelectorPlotFillGradientColor:!0,rangeSelectorPlotStrokeColor:!0,rangeSelectorBackgroundStrokeColor:!0,rangeSelectorBackgroundLineWidth:!0,rangeSelectorPlotLineWidth:!0,rangeSelectorForegroundStrokeColor:!0,rangeSelectorForegroundLineWidth:!0,rangeSelectorAlpha:!0,showLabelsOnHighlight:!0,showRoller:!0,strokeWidth:!0,underlayCallback:!0,unhighlightCallback:!0,zoomCallback:!0},it={DEFAULT:function(t,e,a,i,n,r,o){a.beginPath(),a.fillStyle=r,a.arc(i,n,o,0,2*Math.PI,!1),a.fill()}};a.Circles=it;var nt=/^rgba?\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})(?:,\\s*([01](?:\\.\\d+)?))?\\)$/,rt=[\"K\",\"M\",\"B\",\"T\",\"Q\"],ot=[\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"],st=[\"m\",\"u\",\"n\",\"p\",\"f\",\"a\",\"z\",\"y\"],lt=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]},{\"./dygraph-tickers\":16}],18:[function(t,e,a){(function(i){\"use strict\";function n(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}function r(t){return t&&t.__esModule?t:{default:t}}function o(t){var e=t[0],a=e[0];if(\"number\"!=typeof a&&!x.isDateLike(a))throw new Error(\"Expected number or date but got \"+typeof a+\": \"+a+\".\");for(var i=1;i<e.length;i++){var n=e[i];if(null!==n&&void 0!==n&&(\"number\"!=typeof n&&!x.isArrayLike(n)))throw new Error(\"Expected number or array but got \"+typeof n+\": \"+n+\".\")}}Object.defineProperty(a,\"__esModule\",{value:!0});var s=function(){function t(t,e){var a=[],i=!0,n=!1,r=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(a.push(o.value),!e||a.length!==e);i=!0);}catch(t){n=!0,r=t}finally{try{!i&&s.return&&s.return()}finally{if(n)throw r}}return a}return function(e,a){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,a);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),l=t(\"./dygraph-layout\"),h=r(l),u=t(\"./dygraph-canvas\"),d=r(u),c=t(\"./dygraph-options\"),p=r(c),g=t(\"./dygraph-interaction-model\"),f=r(g),v=t(\"./dygraph-tickers\"),_=n(v),y=t(\"./dygraph-utils\"),x=n(y),m=t(\"./dygraph-default-attrs\"),b=r(m),w=t(\"./dygraph-options-reference\"),A=(r(w),t(\"./iframe-tarp\")),O=r(A),D=t(\"./datahandler/default\"),E=r(D),L=t(\"./datahandler/bars-error\"),T=r(L),S=t(\"./datahandler/bars-custom\"),P=r(S),C=t(\"./datahandler/default-fractions\"),M=r(C),N=t(\"./datahandler/bars-fractions\"),F=r(N),k=t(\"./datahandler/bars\"),R=r(k),I=t(\"./plugins/annotations\"),H=r(I),Y=t(\"./plugins/axes\"),X=r(Y),V=t(\"./plugins/chart-labels\"),Z=r(V),B=t(\"./plugins/grid\"),G=r(B),W=t(\"./plugins/legend\"),U=r(W),z=t(\"./plugins/range-selector\"),j=r(z),K=t(\"./dygraph-gviz\"),q=r(K),Q=function(t,e,a){this.__init__(t,e,a)};Q.NAME=\"Dygraph\",Q.VERSION=\"2.1.0\",Q.DEFAULT_ROLL_PERIOD=1,Q.DEFAULT_WIDTH=480,Q.DEFAULT_HEIGHT=320,Q.ANIMATION_STEPS=12,Q.ANIMATION_DURATION=200,Q.Plotters=d.default._Plotters,Q.addedAnnotationCSS=!1,Q.prototype.__init__=function(t,e,a){if(this.is_initial_draw_=!0,this.readyFns_=[],null!==a&&void 0!==a||(a={}),a=Q.copyUserAttrs_(a),\"string\"==typeof t&&(t=document.getElementById(t)),!t)throw new Error(\"Constructing dygraph with a non-existent div!\");this.maindiv_=t,this.file_=e,this.rollPeriod_=a.rollPeriod||Q.DEFAULT_ROLL_PERIOD,this.previousVerticalX_=-1,this.fractions_=a.fractions||!1,this.dateWindow_=a.dateWindow||null,this.annotations_=[],t.innerHTML=\"\",\"\"===t.style.width&&a.width&&(t.style.width=a.width+\"px\"),\"\"===t.style.height&&a.height&&(t.style.height=a.height+\"px\"),\"\"===t.style.height&&0===t.clientHeight&&(t.style.height=Q.DEFAULT_HEIGHT+\"px\",\"\"===t.style.width&&(t.style.width=Q.DEFAULT_WIDTH+\"px\")),this.width_=t.clientWidth||a.width||0,this.height_=t.clientHeight||a.height||0,a.stackedGraph&&(a.fillGraph=!0),this.user_attrs_={},x.update(this.user_attrs_,a),this.attrs_={},x.updateDeep(this.attrs_,b.default),this.boundaryIds_=[],this.setIndexByName_={},this.datasetIndex_=[],this.registeredEvents_=[],this.eventListeners_={},this.attributes_=new p.default(this),this.createInterface_(),this.plugins_=[];for(var i=Q.PLUGINS.concat(this.getOption(\"plugins\")),n=0;n<i.length;n++){var r,o=i[n];r=void 0!==o.activate?o:new o;var s={plugin:r,events:{},options:{},pluginOptions:{}},l=r.activate(this);for(var h in l)l.hasOwnProperty(h)&&(s.events[h]=l[h]);this.plugins_.push(s)}for(var n=0;n<this.plugins_.length;n++){var u=this.plugins_[n];for(var h in u.events)if(u.events.hasOwnProperty(h)){var d=u.events[h],c=[u.plugin,d];h in this.eventListeners_?this.eventListeners_[h].push(c):this.eventListeners_[h]=[c]}}this.createDragInterface_(),this.start_()},Q.prototype.cascadeEvents_=function(t,e){if(!(t in this.eventListeners_))return!1;var a={dygraph:this,cancelable:!1,defaultPrevented:!1,preventDefault:function(){if(!a.cancelable)throw\"Cannot call preventDefault on non-cancelable event.\";a.defaultPrevented=!0},propagationStopped:!1,stopPropagation:function(){a.propagationStopped=!0}};x.update(a,e);var i=this.eventListeners_[t];if(i)for(var n=i.length-1;n>=0;n--){var r=i[n][0],o=i[n][1];if(o.call(r,a),a.propagationStopped)break}return a.defaultPrevented},Q.prototype.getPluginInstance_=function(t){for(var e=0;e<this.plugins_.length;e++){var a=this.plugins_[e];if(a.plugin instanceof t)return a.plugin}return null},Q.prototype.isZoomed=function(t){var e=!!this.dateWindow_;if(\"x\"===t)return e;var a=this.axes_.map(function(t){return!!t.valueRange}).indexOf(!0)>=0;if(null===t||void 0===t)return e||a;if(\"y\"===t)return a;throw new Error(\"axis parameter is [\"+t+\"] must be null, 'x' or 'y'.\")},Q.prototype.toString=function(){var t=this.maindiv_;return\"[Dygraph \"+(t&&t.id?t.id:t)+\"]\"},Q.prototype.attr_=function(t,e){return e?this.attributes_.getForSeries(t,e):this.attributes_.get(t)},Q.prototype.getOption=function(t,e){return this.attr_(t,e)},Q.prototype.getNumericOption=function(t,e){return this.getOption(t,e)},Q.prototype.getStringOption=function(t,e){return this.getOption(t,e)},Q.prototype.getBooleanOption=function(t,e){return this.getOption(t,e)},Q.prototype.getFunctionOption=function(t,e){return this.getOption(t,e)},Q.prototype.getOptionForAxis=function(t,e){return this.attributes_.getForAxis(t,e)},Q.prototype.optionsViewForAxis_=function(t){var e=this;return function(a){var i=e.user_attrs_.axes;return i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:(\"x\"!==t||\"logscale\"!==a)&&(void 0!==e.user_attrs_[a]?e.user_attrs_[a]:(i=e.attrs_.axes,i&&i[t]&&i[t].hasOwnProperty(a)?i[t][a]:\"y\"==t&&e.axes_[0].hasOwnProperty(a)?e.axes_[0][a]:\"y2\"==t&&e.axes_[1].hasOwnProperty(a)?e.axes_[1][a]:e.attr_(a)))}},Q.prototype.rollPeriod=function(){return this.rollPeriod_},Q.prototype.xAxisRange=function(){return this.dateWindow_?this.dateWindow_:this.xAxisExtremes()},Q.prototype.xAxisExtremes=function(){var t=this.getNumericOption(\"xRangePad\")/this.plotter_.area.w;if(0===this.numRows())return[0-t,1+t];var e=this.rawData_[0][0],a=this.rawData_[this.rawData_.length-1][0];if(t){var i=a-e;e-=i*t,a+=i*t}return[e,a]},Q.prototype.yAxisExtremes=function(){var t=this.gatherDatasets_(this.rolledSeries_,null),e=t.extremes,a=this.axes_;this.computeYAxisRanges_(e);var i=this.axes_;return this.axes_=a,i.map(function(t){return t.extremeRange})},Q.prototype.yAxisRange=function(t){if(void 0===t&&(t=0),t<0||t>=this.axes_.length)return null;var e=this.axes_[t];return[e.computedValueRange[0],e.computedValueRange[1]]},Q.prototype.yAxisRanges=function(){for(var t=[],e=0;e<this.axes_.length;e++)t.push(this.yAxisRange(e));return t},Q.prototype.toDomCoords=function(t,e,a){return[this.toDomXCoord(t),this.toDomYCoord(e,a)]},Q.prototype.toDomXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();return e.x+(t-a[0])/(a[1]-a[0])*e.w},Q.prototype.toDomYCoord=function(t,e){var a=this.toPercentYCoord(t,e);if(null===a)return null;var i=this.plotter_.area;return i.y+a*i.h},Q.prototype.toDataCoords=function(t,e,a){return[this.toDataXCoord(t),this.toDataYCoord(e,a)]},Q.prototype.toDataXCoord=function(t){if(null===t)return null;var e=this.plotter_.area,a=this.xAxisRange();if(this.attributes_.getForAxis(\"logscale\",\"x\")){var i=(t-e.x)/e.w;return x.logRangeFraction(a[0],a[1],i)}return a[0]+(t-e.x)/e.w*(a[1]-a[0])},Q.prototype.toDataYCoord=function(t,e){if(null===t)return null;var a=this.plotter_.area,i=this.yAxisRange(e);if(void 0===e&&(e=0),this.attributes_.getForAxis(\"logscale\",e)){var n=(t-a.y)/a.h;return x.logRangeFraction(i[1],i[0],n)}return i[0]+(a.y+a.h-t)/a.h*(i[1]-i[0])},Q.prototype.toPercentYCoord=function(t,e){if(null===t)return null;void 0===e&&(e=0);var a,i=this.yAxisRange(e);if(this.attributes_.getForAxis(\"logscale\",e)){var n=x.log10(i[0]),r=x.log10(i[1]);a=(r-x.log10(t))/(r-n)}else a=(i[1]-t)/(i[1]-i[0]);return a},Q.prototype.toPercentXCoord=function(t){if(null===t)return null;var e,a=this.xAxisRange();if(!0===this.attributes_.getForAxis(\"logscale\",\"x\")){var i=x.log10(a[0]),n=x.log10(a[1]);e=(x.log10(t)-i)/(n-i)}else e=(t-a[0])/(a[1]-a[0]);return e},Q.prototype.numColumns=function(){return this.rawData_?this.rawData_[0]?this.rawData_[0].length:this.attr_(\"labels\").length:0},Q.prototype.numRows=function(){return this.rawData_?this.rawData_.length:0},Q.prototype.getValue=function(t,e){return t<0||t>this.rawData_.length?null:e<0||e>this.rawData_[t].length?null:this.rawData_[t][e]},Q.prototype.createInterface_=function(){var t=this.maindiv_;this.graphDiv=document.createElement(\"div\"),this.graphDiv.style.textAlign=\"left\",this.graphDiv.style.position=\"relative\",t.appendChild(this.graphDiv),this.canvas_=x.createCanvas(),this.canvas_.style.position=\"absolute\",this.hidden_=this.createPlotKitCanvas_(this.canvas_),this.canvas_ctx_=x.getContext(this.canvas_),this.hidden_ctx_=x.getContext(this.hidden_),this.resizeElements_(),this.graphDiv.appendChild(this.hidden_),this.graphDiv.appendChild(this.canvas_),this.mouseEventElement_=this.createMouseEventElement_(),this.layout_=new h.default(this);var e=this;this.mouseMoveHandler_=function(t){e.mouseMove_(t)},this.mouseOutHandler_=function(t){var a=t.target||t.fromElement,i=t.relatedTarget||t.toElement;x.isNodeContainedBy(a,e.graphDiv)&&!x.isNodeContainedBy(i,e.graphDiv)&&e.mouseOut_(t)},this.addAndTrackEvent(window,\"mouseout\",this.mouseOutHandler_),this.addAndTrackEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),this.resizeHandler_||(this.resizeHandler_=function(t){e.resize()},this.addAndTrackEvent(window,\"resize\",this.resizeHandler_))},Q.prototype.resizeElements_=function(){this.graphDiv.style.width=this.width_+\"px\",this.graphDiv.style.height=this.height_+\"px\";var t=this.getNumericOption(\"pixelRatio\"),e=t||x.getContextPixelRatio(this.canvas_ctx_);this.canvas_.width=this.width_*e,this.canvas_.height=this.height_*e,this.canvas_.style.width=this.width_+\"px\",this.canvas_.style.height=this.height_+\"px\",1!==e&&this.canvas_ctx_.scale(e,e);var a=t||x.getContextPixelRatio(this.hidden_ctx_);this.hidden_.width=this.width_*a,this.hidden_.height=this.height_*a,this.hidden_.style.width=this.width_+\"px\",this.hidden_.style.height=this.height_+\"px\",1!==a&&this.hidden_ctx_.scale(a,a)},Q.prototype.destroy=function(){this.canvas_ctx_.restore(),this.hidden_ctx_.restore();for(var t=this.plugins_.length-1;t>=0;t--){var e=this.plugins_.pop();e.plugin.destroy&&e.plugin.destroy()}this.removeTrackedEvents_(),x.removeEvent(window,\"mouseout\",this.mouseOutHandler_),x.removeEvent(this.mouseEventElement_,\"mousemove\",this.mouseMoveHandler_),x.removeEvent(window,\"resize\",this.resizeHandler_),this.resizeHandler_=null,function t(e){for(;e.hasChildNodes();)t(e.firstChild),e.removeChild(e.firstChild)}(this.maindiv_);var a=function(t){for(var e in t)\"object\"==typeof t[e]&&(t[e]=null)};a(this.layout_),a(this.plotter_),a(this)},Q.prototype.createPlotKitCanvas_=function(t){var e=x.createCanvas();return e.style.position=\"absolute\",e.style.top=t.style.top,e.style.left=t.style.left,\ne.width=this.width_,e.height=this.height_,e.style.width=this.width_+\"px\",e.style.height=this.height_+\"px\",e},Q.prototype.createMouseEventElement_=function(){return this.canvas_},Q.prototype.setColors_=function(){var t=this.getLabels(),e=t.length-1;this.colors_=[],this.colorsMap_={};for(var a=this.getNumericOption(\"colorSaturation\")||1,i=this.getNumericOption(\"colorValue\")||.5,n=Math.ceil(e/2),r=this.getOption(\"colors\"),o=this.visibility(),s=0;s<e;s++)if(o[s]){var l=t[s+1],h=this.attributes_.getForSeries(\"color\",l);if(!h)if(r)h=r[s%r.length];else{var u=s%2?n+(s+1)/2:Math.ceil((s+1)/2),d=1*u/(1+e);h=x.hsvToRGB(d,a,i)}this.colors_.push(h),this.colorsMap_[l]=h}},Q.prototype.getColors=function(){return this.colors_},Q.prototype.getPropertiesForSeries=function(t){for(var e=-1,a=this.getLabels(),i=1;i<a.length;i++)if(a[i]==t){e=i;break}return-1==e?null:{name:t,column:e,visible:this.visibility()[e-1],color:this.colorsMap_[t],axis:1+this.attributes_.axisForSeries(t)}},Q.prototype.createRollInterface_=function(){var t=this,e=this.roller_;e||(this.roller_=e=document.createElement(\"input\"),e.type=\"text\",e.style.display=\"none\",e.className=\"dygraph-roller\",this.graphDiv.appendChild(e));var a=this.getBooleanOption(\"showRoller\")?\"block\":\"none\",i=this.getArea(),n={top:i.y+i.h-25+\"px\",left:i.x+1+\"px\",display:a};e.size=\"2\",e.value=this.rollPeriod_,x.update(e.style,n),e.onchange=function(){return t.adjustRoll(e.value)}},Q.prototype.createDragInterface_=function(){var t={isZooming:!1,isPanning:!1,is2DPan:!1,dragStartX:null,dragStartY:null,dragEndX:null,dragEndY:null,dragDirection:null,prevEndX:null,prevEndY:null,prevDragDirection:null,cancelNextDblclick:!1,initialLeftmostDate:null,xUnitsPerPixel:null,dateRange:null,px:0,py:0,boundedDates:null,boundedValues:null,tarp:new O.default,initializeMouseDown:function(t,e,a){t.preventDefault?t.preventDefault():(t.returnValue=!1,t.cancelBubble=!0);var i=x.findPos(e.canvas_);a.px=i.x,a.py=i.y,a.dragStartX=x.dragGetX_(t,a),a.dragStartY=x.dragGetY_(t,a),a.cancelNextDblclick=!1,a.tarp.cover()},destroy:function(){var t=this;if((t.isZooming||t.isPanning)&&(t.isZooming=!1,t.dragStartX=null,t.dragStartY=null),t.isPanning){t.isPanning=!1,t.draggingDate=null,t.dateRange=null;for(var e=0;e<a.axes_.length;e++)delete a.axes_[e].draggingValue,delete a.axes_[e].dragValueRange}t.tarp.uncover()}},e=this.getOption(\"interactionModel\"),a=this;for(var i in e)e.hasOwnProperty(i)&&this.addAndTrackEvent(this.mouseEventElement_,i,function(e){return function(i){e(i,a,t)}}(e[i]));if(!e.willDestroyContextMyself){var n=function(e){t.destroy()};this.addAndTrackEvent(document,\"mouseup\",n)}},Q.prototype.drawZoomRect_=function(t,e,a,i,n,r,o,s){var l=this.canvas_ctx_;r==x.HORIZONTAL?l.clearRect(Math.min(e,o),this.layout_.getPlotArea().y,Math.abs(e-o),this.layout_.getPlotArea().h):r==x.VERTICAL&&l.clearRect(this.layout_.getPlotArea().x,Math.min(i,s),this.layout_.getPlotArea().w,Math.abs(i-s)),t==x.HORIZONTAL?a&&e&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(Math.min(e,a),this.layout_.getPlotArea().y,Math.abs(a-e),this.layout_.getPlotArea().h)):t==x.VERTICAL&&n&&i&&(l.fillStyle=\"rgba(128,128,128,0.33)\",l.fillRect(this.layout_.getPlotArea().x,Math.min(i,n),this.layout_.getPlotArea().w,Math.abs(n-i)))},Q.prototype.clearZoomRect_=function(){this.currentZoomRectArgs_=null,this.canvas_ctx_.clearRect(0,0,this.width_,this.height_)},Q.prototype.doZoomX_=function(t,e){this.currentZoomRectArgs_=null;var a=this.toDataXCoord(t),i=this.toDataXCoord(e);this.doZoomXDates_(a,i)},Q.prototype.doZoomXDates_=function(t,e){var a=this,i=this.xAxisRange(),n=[t,e],r=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(i,n,null,null,function(){r&&r.call(a,t,e,a.yAxisRanges())})},Q.prototype.doZoomY_=function(t,e){var a=this;this.currentZoomRectArgs_=null;for(var i=this.yAxisRanges(),n=[],r=0;r<this.axes_.length;r++){var o=this.toDataYCoord(t,r),l=this.toDataYCoord(e,r);n.push([l,o])}var h=this.getFunctionOption(\"zoomCallback\");this.doAnimatedZoom(null,null,i,n,function(){if(h){var t=a.xAxisRange(),e=s(t,2),i=e[0],n=e[1];h.call(a,i,n,a.yAxisRanges())}})},Q.zoomAnimationFunction=function(t,e){return(1-Math.pow(1.5,-t))/(1-Math.pow(1.5,-e))},Q.prototype.resetZoom=function(){var t=this,e=this.isZoomed(\"x\"),a=this.isZoomed(\"y\"),i=e||a;if(this.clearSelection(),i){var n=this.xAxisExtremes(),r=s(n,2),o=r[0],l=r[1],h=this.getBooleanOption(\"animatedZooms\"),u=this.getFunctionOption(\"zoomCallback\");if(!h)return this.dateWindow_=null,this.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),this.drawGraph_(),void(u&&u.call(this,o,l,this.yAxisRanges()));var d=null,c=null,p=null,g=null;e&&(d=this.xAxisRange(),c=[o,l]),a&&(p=this.yAxisRanges(),g=this.yAxisExtremes()),this.doAnimatedZoom(d,c,p,g,function(){t.dateWindow_=null,t.axes_.forEach(function(t){t.valueRange&&delete t.valueRange}),u&&u.call(t,o,l,t.yAxisRanges())})}},Q.prototype.doAnimatedZoom=function(t,e,a,i,n){var r,o,s=this,l=this.getBooleanOption(\"animatedZooms\")?Q.ANIMATION_STEPS:1,h=[],u=[];if(null!==t&&null!==e)for(r=1;r<=l;r++)o=Q.zoomAnimationFunction(r,l),h[r-1]=[t[0]*(1-o)+o*e[0],t[1]*(1-o)+o*e[1]];if(null!==a&&null!==i)for(r=1;r<=l;r++){o=Q.zoomAnimationFunction(r,l);for(var d=[],c=0;c<this.axes_.length;c++)d.push([a[c][0]*(1-o)+o*i[c][0],a[c][1]*(1-o)+o*i[c][1]]);u[r-1]=d}x.repeatAndCleanup(function(t){if(u.length)for(var e=0;e<s.axes_.length;e++){var a=u[t][e];s.axes_[e].valueRange=[a[0],a[1]]}h.length&&(s.dateWindow_=h[t]),s.drawGraph_()},l,Q.ANIMATION_DURATION/l,n)},Q.prototype.getArea=function(){return this.plotter_.area},Q.prototype.eventToDomCoords=function(t){if(t.offsetX&&t.offsetY)return[t.offsetX,t.offsetY];var e=x.findPos(this.mouseEventElement_);return[x.pageX(t)-e.x,x.pageY(t)-e.y]},Q.prototype.findClosestRow=function(t){for(var e=1/0,a=-1,i=this.layout_.points,n=0;n<i.length;n++)for(var r=i[n],o=r.length,s=0;s<o;s++){var l=r[s];if(x.isValidPoint(l,!0)){var h=Math.abs(l.canvasx-t);h<e&&(e=h,a=l.idx)}}return a},Q.prototype.findClosestPoint=function(t,e){for(var a,i,n,r,o,s,l,h=1/0,u=this.layout_.points.length-1;u>=0;--u)for(var d=this.layout_.points[u],c=0;c<d.length;++c)r=d[c],x.isValidPoint(r)&&(i=r.canvasx-t,n=r.canvasy-e,(a=i*i+n*n)<h&&(h=a,o=r,s=u,l=r.idx));return{row:l,seriesName:this.layout_.setNames[s],point:o}},Q.prototype.findStackedPoint=function(t,e){for(var a,i,n=this.findClosestRow(t),r=0;r<this.layout_.points.length;++r){var o=this.getLeftBoundary_(r),s=n-o,l=this.layout_.points[r];if(!(s>=l.length)){var h=l[s];if(x.isValidPoint(h)){var u=h.canvasy;if(t>h.canvasx&&s+1<l.length){var d=l[s+1];if(x.isValidPoint(d)){var c=d.canvasx-h.canvasx;if(c>0){var p=(t-h.canvasx)/c;u+=p*(d.canvasy-h.canvasy)}}}else if(t<h.canvasx&&s>0){var g=l[s-1];if(x.isValidPoint(g)){var c=h.canvasx-g.canvasx;if(c>0){var p=(h.canvasx-t)/c;u+=p*(g.canvasy-h.canvasy)}}}(0===r||u<e)&&(a=h,i=r)}}}return{row:n,seriesName:this.layout_.setNames[i],point:a}},Q.prototype.mouseMove_=function(t){var e=this.layout_.points;if(void 0!==e&&null!==e){var a=this.eventToDomCoords(t),i=a[0],n=a[1],r=this.getOption(\"highlightSeriesOpts\"),o=!1;if(r&&!this.isSeriesLocked()){var s;s=this.getBooleanOption(\"stackedGraph\")?this.findStackedPoint(i,n):this.findClosestPoint(i,n),o=this.setSelection(s.row,s.seriesName)}else{var l=this.findClosestRow(i);o=this.setSelection(l)}var h=this.getFunctionOption(\"highlightCallback\");h&&o&&h.call(this,t,this.lastx_,this.selPoints_,this.lastRow_,this.highlightSet_)}},Q.prototype.getLeftBoundary_=function(t){if(this.boundaryIds_[t])return this.boundaryIds_[t][0];for(var e=0;e<this.boundaryIds_.length;e++)if(void 0!==this.boundaryIds_[e])return this.boundaryIds_[e][0];return 0},Q.prototype.animateSelection_=function(t){void 0===this.fadeLevel&&(this.fadeLevel=0),void 0===this.animateId&&(this.animateId=0);var e=this.fadeLevel,a=t<0?e:10-e;if(a<=0)return void(this.fadeLevel&&this.updateSelection_(1));var i=++this.animateId,n=this,r=function(){0!==n.fadeLevel&&t<0&&(n.fadeLevel=0,n.clearSelection())};x.repeatAndCleanup(function(e){n.animateId==i&&(n.fadeLevel+=t,0===n.fadeLevel?n.clearSelection():n.updateSelection_(n.fadeLevel/10))},a,30,r)},Q.prototype.updateSelection_=function(t){this.cascadeEvents_(\"select\",{selectedRow:-1===this.lastRow_?void 0:this.lastRow_,selectedX:-1===this.lastx_?void 0:this.lastx_,selectedPoints:this.selPoints_});var e,a=this.canvas_ctx_;if(this.getOption(\"highlightSeriesOpts\")){a.clearRect(0,0,this.width_,this.height_);var i=1-this.getNumericOption(\"highlightSeriesBackgroundAlpha\"),n=x.toRGB_(this.getOption(\"highlightSeriesBackgroundColor\"));if(i){if(void 0===t)return void this.animateSelection_(1);i*=t,a.fillStyle=\"rgba(\"+n.r+\",\"+n.g+\",\"+n.b+\",\"+i+\")\",a.fillRect(0,0,this.width_,this.height_)}this.plotter_._renderLineChart(this.highlightSet_,a)}else if(this.previousVerticalX_>=0){var r=0,o=this.attr_(\"labels\");for(e=1;e<o.length;e++){var s=this.getNumericOption(\"highlightCircleSize\",o[e]);s>r&&(r=s)}var l=this.previousVerticalX_;a.clearRect(l-r-1,0,2*r+2,this.height_)}if(this.selPoints_.length>0){var h=this.selPoints_[0].canvasx;for(a.save(),e=0;e<this.selPoints_.length;e++){var u=this.selPoints_[e];if(!isNaN(u.canvasy)){var d=this.getNumericOption(\"highlightCircleSize\",u.name),c=this.getFunctionOption(\"drawHighlightPointCallback\",u.name),p=this.plotter_.colors[u.name];c||(c=x.Circles.DEFAULT),a.lineWidth=this.getNumericOption(\"strokeWidth\",u.name),a.strokeStyle=p,a.fillStyle=p,c.call(this,this,u.name,a,h,u.canvasy,p,d,u.idx)}}a.restore(),this.previousVerticalX_=h}},Q.prototype.setSelection=function(t,e,a){this.selPoints_=[];var i=!1;if(!1!==t&&t>=0){t!=this.lastRow_&&(i=!0),this.lastRow_=t;for(var n=0;n<this.layout_.points.length;++n){var r=this.layout_.points[n],o=t-this.getLeftBoundary_(n);if(o>=0&&o<r.length&&r[o].idx==t){var s=r[o];null!==s.yval&&this.selPoints_.push(s)}else for(var l=0;l<r.length;++l){var s=r[l];if(s.idx==t){null!==s.yval&&this.selPoints_.push(s);break}}}}else this.lastRow_>=0&&(i=!0),this.lastRow_=-1;return this.selPoints_.length?this.lastx_=this.selPoints_[0].xval:this.lastx_=-1,void 0!==e&&(this.highlightSet_!==e&&(i=!0),this.highlightSet_=e),void 0!==a&&(this.lockedSet_=a),i&&this.updateSelection_(void 0),i},Q.prototype.mouseOut_=function(t){this.getFunctionOption(\"unhighlightCallback\")&&this.getFunctionOption(\"unhighlightCallback\").call(this,t),this.getBooleanOption(\"hideOverlayOnMouseOut\")&&!this.lockedSet_&&this.clearSelection()},Q.prototype.clearSelection=function(){if(this.cascadeEvents_(\"deselect\",{}),this.lockedSet_=!1,this.fadeLevel)return void this.animateSelection_(-1);this.canvas_ctx_.clearRect(0,0,this.width_,this.height_),this.fadeLevel=0,this.selPoints_=[],this.lastx_=-1,this.lastRow_=-1,this.highlightSet_=null},Q.prototype.getSelection=function(){if(!this.selPoints_||this.selPoints_.length<1)return-1;for(var t=0;t<this.layout_.points.length;t++)for(var e=this.layout_.points[t],a=0;a<e.length;a++)if(e[a].x==this.selPoints_[0].x)return e[a].idx;return-1},Q.prototype.getHighlightSeries=function(){return this.highlightSet_},Q.prototype.isSeriesLocked=function(){return this.lockedSet_},Q.prototype.loadedEvent_=function(t){this.rawData_=this.parseCSV_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_()},Q.prototype.addXTicks_=function(){var t;t=this.dateWindow_?[this.dateWindow_[0],this.dateWindow_[1]]:this.xAxisExtremes();var e=this.optionsViewForAxis_(\"x\"),a=e(\"ticker\")(t[0],t[1],this.plotter_.area.w,e,this);this.layout_.setXTicks(a)},Q.prototype.getHandlerClass_=function(){return this.attr_(\"dataHandler\")?this.attr_(\"dataHandler\"):this.fractions_?this.getBooleanOption(\"errorBars\")?F.default:M.default:this.getBooleanOption(\"customBars\")?P.default:this.getBooleanOption(\"errorBars\")?T.default:E.default},Q.prototype.predraw_=function(){var t=new Date;this.dataHandler_=new(this.getHandlerClass_()),this.layout_.computePlotArea(),this.computeYAxes_(),this.is_initial_draw_||(this.canvas_ctx_.restore(),this.hidden_ctx_.restore()),this.canvas_ctx_.save(),this.hidden_ctx_.save(),this.plotter_=new d.default(this,this.hidden_,this.hidden_ctx_,this.layout_),this.createRollInterface_(),this.cascadeEvents_(\"predraw\"),this.rolledSeries_=[null];for(var e=1;e<this.numColumns();e++){var a=this.dataHandler_.extractSeries(this.rawData_,e,this.attributes_);this.rollPeriod_>1&&(a=this.dataHandler_.rollingAverage(a,this.rollPeriod_,this.attributes_)),this.rolledSeries_.push(a)}this.drawGraph_();var i=new Date;this.drawingTimeMs_=i-t},Q.PointType=void 0,Q.stackPoints_=function(t,e,a,i){for(var n=null,r=null,o=null,s=-1,l=0;l<t.length;++l){var h=t[l],u=h.xval;void 0===e[u]&&(e[u]=0);var d=h.yval;isNaN(d)||null===d?\"none\"==i?d=0:(!function(e){if(!(s>=e))for(var a=e;a<t.length;++a)if(o=null,!isNaN(t[a].yval)&&null!==t[a].yval){s=a,o=t[a];break}}(l),d=r&&o&&\"none\"!=i?r.yval+(o.yval-r.yval)*((u-r.xval)/(o.xval-r.xval)):r&&\"all\"==i?r.yval:o&&\"all\"==i?o.yval:0):r=h;var c=e[u];n!=u&&(c+=d,e[u]=c),n=u,h.yval_stacked=c,c>a[1]&&(a[1]=c),c<a[0]&&(a[0]=c)}},Q.prototype.gatherDatasets_=function(t,e){var a,i,n,r,o,s,l=[],h=[],u=[],d={},c=t.length-1;for(a=c;a>=1;a--)if(this.visibility()[a-1]){if(e){s=t[a];var p=e[0],g=e[1];for(n=null,r=null,i=0;i<s.length;i++)s[i][0]>=p&&null===n&&(n=i),s[i][0]<=g&&(r=i);null===n&&(n=0);for(var f=n,v=!0;v&&f>0;)f--,v=null===s[f][1];null===r&&(r=s.length-1);var _=r;for(v=!0;v&&_<s.length-1;)_++,v=null===s[_][1];f!==n&&(n=f),_!==r&&(r=_),l[a-1]=[n,r],s=s.slice(n,r+1)}else s=t[a],l[a-1]=[0,s.length-1];var y=this.attr_(\"labels\")[a],x=this.dataHandler_.getExtremeYValues(s,e,this.getBooleanOption(\"stepPlot\",y)),m=this.dataHandler_.seriesToPoints(s,y,l[a-1][0]);this.getBooleanOption(\"stackedGraph\")&&(o=this.attributes_.axisForSeries(y),void 0===u[o]&&(u[o]=[]),Q.stackPoints_(m,u[o],x,this.getBooleanOption(\"stackedGraphNaNFill\"))),d[y]=x,h[a]=m}return{points:h,extremes:d,boundaryIds:l}},Q.prototype.drawGraph_=function(){var t=new Date,e=this.is_initial_draw_;this.is_initial_draw_=!1,this.layout_.removeAllDatasets(),this.setColors_(),this.attrs_.pointSize=.5*this.getNumericOption(\"highlightCircleSize\");var a=this.gatherDatasets_(this.rolledSeries_,this.dateWindow_),i=a.points,n=a.extremes;this.boundaryIds_=a.boundaryIds,this.setIndexByName_={};for(var r=this.attr_(\"labels\"),o=0,s=1;s<i.length;s++)this.visibility()[s-1]&&(this.layout_.addDataset(r[s],i[s]),this.datasetIndex_[s]=o++);for(var s=0;s<r.length;s++)this.setIndexByName_[r[s]]=s;if(this.computeYAxisRanges_(n),this.layout_.setYAxes(this.axes_),this.addXTicks_(),this.layout_.evaluate(),this.renderGraph_(e),this.getStringOption(\"timingName\")){var l=new Date;console.log(this.getStringOption(\"timingName\")+\" - drawGraph: \"+(l-t)+\"ms\")}},Q.prototype.renderGraph_=function(t){this.cascadeEvents_(\"clearChart\"),this.plotter_.clear();var e=this.getFunctionOption(\"underlayCallback\");e&&e.call(this,this.hidden_ctx_,this.layout_.getPlotArea(),this,this);var a={canvas:this.hidden_,drawingContext:this.hidden_ctx_};this.cascadeEvents_(\"willDrawChart\",a),this.plotter_.render(),this.cascadeEvents_(\"didDrawChart\",a),this.lastRow_=-1,this.canvas_.getContext(\"2d\").clearRect(0,0,this.width_,this.height_);var i=this.getFunctionOption(\"drawCallback\");if(null!==i&&i.call(this,this,t),t)for(this.readyFired_=!0;this.readyFns_.length>0;){var n=this.readyFns_.pop();n(this)}},Q.prototype.computeYAxes_=function(){var t,e,a;for(this.axes_=[],t=0;t<this.attributes_.numAxes();t++)e={g:this},x.update(e,this.attributes_.axisOptions(t)),this.axes_[t]=e;for(t=0;t<this.axes_.length;t++)if(0===t)e=this.optionsViewForAxis_(\"y\"+(t?\"2\":\"\")),(a=e(\"valueRange\"))&&(this.axes_[t].valueRange=a);else{var i=this.user_attrs_.axes;i&&i.y2&&(a=i.y2.valueRange)&&(this.axes_[t].valueRange=a)}},Q.prototype.numAxes=function(){return this.attributes_.numAxes()},Q.prototype.axisPropertiesForSeries=function(t){return this.axes_[this.attributes_.axisForSeries(t)]},Q.prototype.computeYAxisRanges_=function(t){for(var e,a,i,n,r,o=function(t){return isNaN(parseFloat(t))},s=this.attributes_.numAxes(),l=0;l<s;l++){var h=this.axes_[l],u=this.attributes_.getForAxis(\"logscale\",l),d=this.attributes_.getForAxis(\"includeZero\",l),c=this.attributes_.getForAxis(\"independentTicks\",l);i=this.attributes_.seriesForAxis(l),e=!0,n=.1;var p=this.getNumericOption(\"yRangePad\");if(null!==p&&(e=!1,n=p/this.plotter_.area.h),0===i.length)h.extremeRange=[0,1];else{for(var g,f,v=1/0,_=-1/0,y=0;y<i.length;y++)t.hasOwnProperty(i[y])&&(g=t[i[y]][0],null!==g&&(v=Math.min(g,v)),null!==(f=t[i[y]][1])&&(_=Math.max(f,_)));d&&!u&&(v>0&&(v=0),_<0&&(_=0)),v==1/0&&(v=0),_==-1/0&&(_=1),a=_-v,0===a&&(0!==_?a=Math.abs(_):(_=1,a=1));var m=_,b=v;e&&(u?(m=_+n*a,b=v):(m=_+n*a,b=v-n*a,b<0&&v>=0&&(b=0),m>0&&_<=0&&(m=0))),h.extremeRange=[b,m]}if(h.valueRange){var w=o(h.valueRange[0])?h.extremeRange[0]:h.valueRange[0],A=o(h.valueRange[1])?h.extremeRange[1]:h.valueRange[1];h.computedValueRange=[w,A]}else h.computedValueRange=h.extremeRange;if(!e)if(w=h.computedValueRange[0],A=h.computedValueRange[1],w===A&&(w-=.5,A+=.5),u){var O=n/(2*n-1),D=(n-1)/(2*n-1);h.computedValueRange[0]=x.logRangeFraction(w,A,O),h.computedValueRange[1]=x.logRangeFraction(w,A,D)}else a=A-w,h.computedValueRange[0]=w-a*n,h.computedValueRange[1]=A+a*n;if(c){h.independentTicks=c;var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\");h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this),r||(r=h)}}if(void 0===r)throw'Configuration Error: At least one axis has to have the \"independentTicks\" option activated.';for(var l=0;l<s;l++){var h=this.axes_[l];if(!h.independentTicks){for(var E=this.optionsViewForAxis_(\"y\"+(l?\"2\":\"\")),L=E(\"ticker\"),T=r.ticks,S=r.computedValueRange[1]-r.computedValueRange[0],P=h.computedValueRange[1]-h.computedValueRange[0],C=[],M=0;M<T.length;M++){var N=(T[M].v-r.computedValueRange[0])/S,F=h.computedValueRange[0]+N*P;C.push(F)}h.ticks=L(h.computedValueRange[0],h.computedValueRange[1],this.plotter_.area.h,E,this,C)}}},Q.prototype.detectTypeFromString_=function(t){var e=!1,a=t.indexOf(\"-\");a>0&&\"e\"!=t[a-1]&&\"E\"!=t[a-1]||t.indexOf(\"/\")>=0||isNaN(parseFloat(t))?e=!0:8==t.length&&t>\"19700101\"&&t<\"20371231\"&&(e=!0),this.setXAxisOptions_(e)},Q.prototype.setXAxisOptions_=function(t){t?(this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter):(this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter)},Q.prototype.parseCSV_=function(t){var e,a,i=[],n=x.detectLineDelimiter(t),r=t.split(n||\"\\n\"),o=this.getStringOption(\"delimiter\");-1==r[0].indexOf(o)&&r[0].indexOf(\"\\t\")>=0&&(o=\"\\t\");var s=0;\"labels\"in this.user_attrs_||(s=1,this.attrs_.labels=r[0].split(o),this.attributes_.reparseSeries());for(var l,h=!1,u=this.attr_(\"labels\").length,d=!1,c=s;c<r.length;c++){var p=r[c];if(c,0!==p.length&&\"#\"!=p[0]){var g=p.split(o);if(!(g.length<2)){var f=[];if(h||(this.detectTypeFromString_(g[0]),l=this.getFunctionOption(\"xValueParser\"),h=!0),f[0]=l(g[0],this),this.fractions_)for(a=1;a<g.length;a++)e=g[a].split(\"/\"),2!=e.length?(console.error('Expected fractional \"num/den\" values in CSV data but found a value \\''+g[a]+\"' on line \"+(1+c)+\" ('\"+p+\"') which is not of this form.\"),f[a]=[0,0]):f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p)];else if(this.getBooleanOption(\"errorBars\"))for(g.length%2!=1&&console.error(\"Expected alternating (value, stdev.) pairs in CSV data but line \"+(1+c)+\" has an odd number of values (\"+(g.length-1)+\"): '\"+p+\"'\"),a=1;a<g.length;a+=2)f[(a+1)/2]=[x.parseFloat_(g[a],c,p),x.parseFloat_(g[a+1],c,p)];else if(this.getBooleanOption(\"customBars\"))for(a=1;a<g.length;a++){var v=g[a];/^ *$/.test(v)?f[a]=[null,null,null]:(e=v.split(\";\"),3==e.length?f[a]=[x.parseFloat_(e[0],c,p),x.parseFloat_(e[1],c,p),x.parseFloat_(e[2],c,p)]:console.warn('When using customBars, values must be either blank or \"low;center;high\" tuples (got \"'+v+'\" on line '+(1+c)))}else for(a=1;a<g.length;a++)f[a]=x.parseFloat_(g[a],c,p);if(i.length>0&&f[0]<i[i.length-1][0]&&(d=!0),f.length!=u&&console.error(\"Number of columns in line \"+c+\" (\"+f.length+\") does not agree with number of labels (\"+u+\") \"+p),0===c&&this.attr_(\"labels\")){var _=!0;for(a=0;_&&a<f.length;a++)f[a]&&(_=!1);if(_){console.warn(\"The dygraphs 'labels' option is set, but the first row of CSV data ('\"+p+\"') appears to also contain labels. Will drop the CSV labels and use the option labels.\");continue}}i.push(f)}}}return d&&(console.warn(\"CSV is out of order; order it correctly to speed loading.\"),i.sort(function(t,e){return t[0]-e[0]})),i},Q.prototype.parseArray_=function(t){if(0===t.length)return console.error(\"Can't plot empty data set\"),null;if(0===t[0].length)return console.error(\"Data set cannot contain an empty row\"),null;o(t);var e;if(null===this.attr_(\"labels\")){for(console.warn(\"Using default labels. Set labels explicitly via 'labels' in the options parameter\"),this.attrs_.labels=[\"X\"],e=1;e<t[0].length;e++)this.attrs_.labels.push(\"Y\"+e);this.attributes_.reparseSeries()}else{var a=this.attr_(\"labels\");if(a.length!=t[0].length)return console.error(\"Mismatch between number of labels (\"+a+\") and number of columns in array (\"+t[0].length+\")\"),null}if(x.isDateLike(t[0][0])){this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;var i=x.clone(t);for(e=0;e<t.length;e++){if(0===i[e].length)return console.error(\"Row \"+(1+e)+\" of data is empty\"),null;if(null===i[e][0]||\"function\"!=typeof i[e][0].getTime||isNaN(i[e][0].getTime()))return console.error(\"x value in row \"+(1+e)+\" is not a Date\"),null;i[e][0]=i[e][0].getTime()}return i}return this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=x.numberAxisLabelFormatter,t},Q.prototype.parseDataTable_=function(t){var e=t.getNumberOfColumns(),a=t.getNumberOfRows(),i=t.getColumnType(0);if(\"date\"==i||\"datetime\"==i)this.attrs_.xValueParser=x.dateParser,this.attrs_.axes.x.valueFormatter=x.dateValueFormatter,this.attrs_.axes.x.ticker=_.dateTicker,this.attrs_.axes.x.axisLabelFormatter=x.dateAxisLabelFormatter;else{if(\"number\"!=i)throw new Error(\"only 'date', 'datetime' and 'number' types are supported for column 1 of DataTable input (Got '\"+i+\"')\");this.attrs_.xValueParser=function(t){return parseFloat(t)},this.attrs_.axes.x.valueFormatter=function(t){return t},this.attrs_.axes.x.ticker=_.numericTicks,this.attrs_.axes.x.axisLabelFormatter=this.attrs_.axes.x.valueFormatter}var n,r,o=[],s={},l=!1;for(n=1;n<e;n++){var h=t.getColumnType(n);if(\"number\"==h)o.push(n);else{if(\"string\"!=h||!this.getBooleanOption(\"displayAnnotations\"))throw new Error(\"Only 'number' is supported as a dependent type with Gviz. 'string' is only supported if displayAnnotations is true\");var u=o[o.length-1];s.hasOwnProperty(u)?s[u].push(n):s[u]=[n],l=!0}}var d=[t.getColumnLabel(0)];for(n=0;n<o.length;n++)d.push(t.getColumnLabel(o[n])),this.getBooleanOption(\"errorBars\")&&(n+=1);this.attrs_.labels=d,e=d.length;var c=[],p=!1,g=[];for(n=0;n<a;n++){var f=[];if(void 0!==t.getValue(n,0)&&null!==t.getValue(n,0)){if(\"date\"==i||\"datetime\"==i?f.push(t.getValue(n,0).getTime()):f.push(t.getValue(n,0)),this.getBooleanOption(\"errorBars\"))for(r=0;r<e-1;r++)f.push([t.getValue(n,1+2*r),t.getValue(n,2+2*r)]);else{for(r=0;r<o.length;r++){var v=o[r];if(f.push(t.getValue(n,v)),l&&s.hasOwnProperty(v)&&null!==t.getValue(n,s[v][0])){var y={};y.series=t.getColumnLabel(v),y.xval=f[0],y.shortText=function(t){var e=String.fromCharCode(65+t%26);for(t=Math.floor(t/26);t>0;)e=String.fromCharCode(65+(t-1)%26)+e.toLowerCase(),t=Math.floor((t-1)/26);return e}(g.length),y.text=\"\";for(var m=0;m<s[v].length;m++)m&&(y.text+=\"\\n\"),y.text+=t.getValue(n,s[v][m]);g.push(y)}}for(r=0;r<f.length;r++)isFinite(f[r])||(f[r]=null)}c.length>0&&f[0]<c[c.length-1][0]&&(p=!0),c.push(f)}else console.warn(\"Ignoring row \"+n+\" of DataTable because of undefined or null first column.\")}p&&(console.warn(\"DataTable is out of order; order it correctly to speed loading.\"),c.sort(function(t,e){return t[0]-e[0]})),this.rawData_=c,g.length>0&&this.setAnnotations(g,!0),this.attributes_.reparseSeries()},Q.prototype.cascadeDataDidUpdateEvent_=function(){this.cascadeEvents_(\"dataDidUpdate\",{})},Q.prototype.start_=function(){var t=this.file_;if(\"function\"==typeof t&&(t=t()),x.isArrayLike(t))this.rawData_=this.parseArray_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"object\"==typeof t&&\"function\"==typeof t.getColumnRange)this.parseDataTable_(t),this.cascadeDataDidUpdateEvent_(),this.predraw_();else if(\"string\"==typeof t){var e=x.detectLineDelimiter(t);if(e)this.loadedEvent_(t);else{var a;a=window.XMLHttpRequest?new XMLHttpRequest:new ActiveXObject(\"Microsoft.XMLHTTP\");var i=this;a.onreadystatechange=function(){4==a.readyState&&(200!==a.status&&0!==a.status||i.loadedEvent_(a.responseText))},a.open(\"GET\",t,!0),a.send(null)}}else console.error(\"Unknown data format: \"+typeof t)},Q.prototype.updateOptions=function(t,e){void 0===e&&(e=!1);var a=t.file,i=Q.copyUserAttrs_(t);\"rollPeriod\"in i&&(this.rollPeriod_=i.rollPeriod),\"dateWindow\"in i&&(this.dateWindow_=i.dateWindow);var n=x.isPixelChangingOptionList(this.attr_(\"labels\"),i);x.updateDeep(this.user_attrs_,i),this.attributes_.reparseSeries(),a?(this.cascadeEvents_(\"dataWillUpdate\",{}),this.file_=a,e||this.start_()):e||(n?this.predraw_():this.renderGraph_(!1))},Q.copyUserAttrs_=function(t){var e={};for(var a in t)t.hasOwnProperty(a)&&\"file\"!=a&&t.hasOwnProperty(a)&&(e[a]=t[a]);return e},Q.prototype.resize=function(t,e){if(!this.resize_lock){this.resize_lock=!0,null===t!=(null===e)&&(console.warn(\"Dygraph.resize() should be called with zero parameters or two non-NULL parameters. Pretending it was zero.\"),t=e=null);var a=this.width_,i=this.height_;t?(this.maindiv_.style.width=t+\"px\",this.maindiv_.style.height=e+\"px\",this.width_=t,this.height_=e):(this.width_=this.maindiv_.clientWidth,this.height_=this.maindiv_.clientHeight),a==this.width_&&i==this.height_||(this.resizeElements_(),this.predraw_()),this.resize_lock=!1}},Q.prototype.adjustRoll=function(t){this.rollPeriod_=t,this.predraw_()},Q.prototype.visibility=function(){for(this.getOption(\"visibility\")||(this.attrs_.visibility=[]);this.getOption(\"visibility\").length<this.numColumns()-1;)this.attrs_.visibility.push(!0);return this.getOption(\"visibility\")},Q.prototype.setVisibility=function(t,e){var a=this.visibility(),i=!1;if(Array.isArray(t)||(null!==t&&\"object\"==typeof t?i=!0:t=[t]),i)for(var n in t)t.hasOwnProperty(n)&&(n<0||n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]);else for(var n=0;n<t.length;n++)\"boolean\"==typeof t[n]?n>=a.length?console.warn(\"Invalid series number in setVisibility: \"+n):a[n]=t[n]:t[n]<0||t[n]>=a.length?console.warn(\"Invalid series number in setVisibility: \"+t[n]):a[t[n]]=e;this.predraw_()},Q.prototype.size=function(){return{width:this.width_,height:this.height_}},Q.prototype.setAnnotations=function(t,e){if(this.annotations_=t,!this.layout_)return void console.warn(\"Tried to setAnnotations before dygraph was ready. Try setting them in a ready() block. See dygraphs.com/tests/annotation.html\");this.layout_.setAnnotations(this.annotations_),e||this.predraw_()},Q.prototype.annotations=function(){return this.annotations_},Q.prototype.getLabels=function(){var t=this.attr_(\"labels\");return t?t.slice():null},Q.prototype.indexFromSetName=function(t){return this.setIndexByName_[t]},Q.prototype.getRowForX=function(t){for(var e=0,a=this.numRows()-1;e<=a;){var i=a+e>>1,n=this.getValue(i,0);if(n<t)e=i+1;else if(n>t)a=i-1;else{if(e==i)return i;a=i}}return null},Q.prototype.ready=function(t){this.is_initial_draw_?this.readyFns_.push(t):t.call(this,this)},Q.prototype.addAndTrackEvent=function(t,e,a){x.addEvent(t,e,a),this.registeredEvents_.push({elem:t,type:e,fn:a})},Q.prototype.removeTrackedEvents_=function(){if(this.registeredEvents_)for(var t=0;t<this.registeredEvents_.length;t++){var e=this.registeredEvents_[t];x.removeEvent(e.elem,e.type,e.fn)}this.registeredEvents_=[]},Q.PLUGINS=[U.default,X.default,j.default,Z.default,H.default,G.default],Q.GVizChart=q.default,Q.DASHED_LINE=x.DASHED_LINE,Q.DOT_DASH_LINE=x.DOT_DASH_LINE,Q.dateAxisLabelFormatter=x.dateAxisLabelFormatter,Q.toRGB_=x.toRGB_,Q.findPos=x.findPos,Q.pageX=x.pageX,Q.pageY=x.pageY,Q.dateString_=x.dateString_,Q.defaultInteractionModel=f.default.defaultModel,Q.nonInteractiveModel=Q.nonInteractiveModel_=f.default.nonInteractiveModel_,Q.Circles=x.Circles,Q.Plugins={Legend:U.default,Axes:X.default,Annotations:H.default,ChartLabels:Z.default,Grid:G.default,RangeSelector:j.default},Q.DataHandlers={DefaultHandler:E.default,BarsHandler:R.default,CustomBarsHandler:P.default,DefaultFractionHandler:M.default,ErrorBarsHandler:T.default,FractionsBarsHandler:F.default},Q.startPan=f.default.startPan,Q.startZoom=f.default.startZoom,Q.movePan=f.default.movePan,Q.moveZoom=f.default.moveZoom,Q.endPan=f.default.endPan,Q.endZoom=f.default.endZoom,Q.numericLinearTicks=_.numericLinearTicks,Q.numericTicks=_.numericTicks,Q.dateTicker=_.dateTicker,Q.Granularity=_.Granularity,Q.getDateAxis=_.getDateAxis,Q.floatFormat=x.floatFormat,a.default=Q,e.exports=a.default}).call(this,t(\"_process\"))},{\"./datahandler/bars\":5,\"./datahandler/bars-custom\":2,\"./datahandler/bars-error\":3,\"./datahandler/bars-fractions\":4,\"./datahandler/default\":8,\"./datahandler/default-fractions\":7,\"./dygraph-canvas\":9,\"./dygraph-default-attrs\":10,\"./dygraph-gviz\":11,\"./dygraph-interaction-model\":12,\"./dygraph-layout\":13,\"./dygraph-options\":15,\"./dygraph-options-reference\":14,\"./dygraph-tickers\":16,\"./dygraph-utils\":17,\"./iframe-tarp\":19,\"./plugins/annotations\":20,\"./plugins/axes\":21,\"./plugins/chart-labels\":22,\"./plugins/grid\":23,\"./plugins/legend\":24,\"./plugins/range-selector\":25,_process:1}],19:[function(t,e,a){\"use strict\";function i(){this.tarps=[]}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"./dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n);i.prototype.cover=function(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e<t.length;e++){var a=t[e],i=r.findPos(a),n=i.x,o=i.y,s=a.offsetWidth,l=a.offsetHeight,h=document.createElement(\"div\");h.style.position=\"absolute\",h.style.left=n+\"px\",h.style.top=o+\"px\",h.style.width=s+\"px\",h.style.height=l+\"px\",h.style.zIndex=999,document.body.appendChild(h),this.tarps.push(h)}},i.prototype.uncover=function(){for(var t=0;t<this.tarps.length;t++)this.tarps[t].parentNode.removeChild(this.tarps[t]);this.tarps=[]},a.default=i,e.exports=a.default},{\"./dygraph-utils\":17}],20:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.annotations_=[]};i.prototype.toString=function(){return\"Annotations Plugin\"},i.prototype.activate=function(t){return{clearChart:this.clearChart,didDrawChart:this.didDrawChart}},i.prototype.detachLabels=function(){for(var t=0;t<this.annotations_.length;t++){var e=this.annotations_[t];e.parentNode&&e.parentNode.removeChild(e),this.annotations_[t]=null}this.annotations_=[]},i.prototype.clearChart=function(t){this.detachLabels()},i.prototype.didDrawChart=function(t){var e=t.dygraph,a=e.layout_.annotated_points;if(a&&0!==a.length)for(var i=t.canvas.parentNode,n=function(t,a,i){return function(n){var r=i.annotation;r.hasOwnProperty(t)?r[t](r,i,e,n):e.getOption(a)&&e.getOption(a)(r,i,e,n)}},r=t.dygraph.getArea(),o={},s=0;s<a.length;s++){var l=a[s];if(!(l.canvasx<r.x||l.canvasx>r.x+r.w||l.canvasy<r.y||l.canvasy>r.y+r.h)){var h=l.annotation,u=6;h.hasOwnProperty(\"tickHeight\")&&(u=h.tickHeight);var d=document.createElement(\"div\");d.style.fontSize=e.getOption(\"axisLabelFontSize\")+\"px\"\n;var c=\"dygraph-annotation\";h.hasOwnProperty(\"icon\")||(c+=\" dygraphDefaultAnnotation dygraph-default-annotation\"),h.hasOwnProperty(\"cssClass\")&&(c+=\" \"+h.cssClass),d.className=c;var p=h.hasOwnProperty(\"width\")?h.width:16,g=h.hasOwnProperty(\"height\")?h.height:16;if(h.hasOwnProperty(\"icon\")){var f=document.createElement(\"img\");f.src=h.icon,f.width=p,f.height=g,d.appendChild(f)}else l.annotation.hasOwnProperty(\"shortText\")&&d.appendChild(document.createTextNode(l.annotation.shortText));var v=l.canvasx-p/2;d.style.left=v+\"px\";var _=0;if(h.attachAtBottom){var y=r.y+r.h-g-u;o[v]?y-=o[v]:o[v]=0,o[v]+=u+g,_=y}else _=l.canvasy-g-u;d.style.top=_+\"px\",d.style.width=p+\"px\",d.style.height=g+\"px\",d.title=l.annotation.text,d.style.color=e.colorsMap_[l.name],d.style.borderColor=e.colorsMap_[l.name],h.div=d,e.addAndTrackEvent(d,\"click\",n(\"clickHandler\",\"annotationClickHandler\",l)),e.addAndTrackEvent(d,\"mouseover\",n(\"mouseOverHandler\",\"annotationMouseOverHandler\",l)),e.addAndTrackEvent(d,\"mouseout\",n(\"mouseOutHandler\",\"annotationMouseOutHandler\",l)),e.addAndTrackEvent(d,\"dblclick\",n(\"dblClickHandler\",\"annotationDblClickHandler\",l)),i.appendChild(d),this.annotations_.push(d);var x=t.drawingContext;if(x.save(),x.strokeStyle=h.hasOwnProperty(\"tickColor\")?h.tickColor:e.colorsMap_[l.name],x.lineWidth=h.hasOwnProperty(\"tickWidth\")?h.tickWidth:e.getOption(\"strokeWidth\"),x.beginPath(),h.attachAtBottom){var y=_+g;x.moveTo(l.canvasx,y),x.lineTo(l.canvasx,y+u)}else x.moveTo(l.canvasx,l.canvasy),x.lineTo(l.canvasx,l.canvasy-2-u);x.closePath(),x.stroke(),x.restore()}}},i.prototype.destroy=function(){this.detachLabels()},a.default=i,e.exports=a.default},{}],21:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=t(\"../dygraph-utils\"),n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(i),r=function(){this.xlabels_=[],this.ylabels_=[]};r.prototype.toString=function(){return\"Axes Plugin\"},r.prototype.activate=function(t){return{layout:this.layout,clearChart:this.clearChart,willDrawChart:this.willDrawChart}},r.prototype.layout=function(t){var e=t.dygraph;if(e.getOptionForAxis(\"drawAxis\",\"y\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y\")+2*e.getOptionForAxis(\"axisTickSize\",\"y\");t.reserveSpaceLeft(a)}if(e.getOptionForAxis(\"drawAxis\",\"x\")){var i;i=e.getOption(\"xAxisHeight\")?e.getOption(\"xAxisHeight\"):e.getOptionForAxis(\"axisLabelFontSize\",\"x\")+2*e.getOptionForAxis(\"axisTickSize\",\"x\"),t.reserveSpaceBottom(i)}if(2==e.numAxes()){if(e.getOptionForAxis(\"drawAxis\",\"y2\")){var a=e.getOptionForAxis(\"axisLabelWidth\",\"y2\")+2*e.getOptionForAxis(\"axisTickSize\",\"y2\");t.reserveSpaceRight(a)}}else e.numAxes()>2&&e.error(\"Only two y-axes are supported at this time. (Trying to use \"+e.numAxes()+\")\")},r.prototype.detachLabels=function(){function t(t){for(var e=0;e<t.length;e++){var a=t[e];a.parentNode&&a.parentNode.removeChild(a)}}t(this.xlabels_),t(this.ylabels_),this.xlabels_=[],this.ylabels_=[]},r.prototype.clearChart=function(t){this.detachLabels()},r.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i=this,r=t.dygraph;if(r.getOptionForAxis(\"drawAxis\",\"x\")||r.getOptionForAxis(\"drawAxis\",\"y\")||r.getOptionForAxis(\"drawAxis\",\"y2\")){var o,s,l,h=t.drawingContext,u=t.canvas.parentNode,d=r.width_,c=r.height_,p=function(t){return{position:\"absolute\",fontSize:r.getOptionForAxis(\"axisLabelFontSize\",t)+\"px\",width:r.getOptionForAxis(\"axisLabelWidth\",t)+\"px\"}},g={x:p(\"x\"),y:p(\"y\"),y2:p(\"y2\")},f=function(t,e,a){var i=document.createElement(\"div\"),r=g[\"y2\"==a?\"y2\":e];n.update(i.style,r);var o=document.createElement(\"div\");return o.className=\"dygraph-axis-label dygraph-axis-label-\"+e+(a?\" dygraph-axis-label-\"+a:\"\"),o.innerHTML=t,i.appendChild(o),i};h.save();var v=r.layout_,_=t.dygraph.plotter_.area,y=function(t){return function(e){return r.getOptionForAxis(e,t)}};if(r.getOptionForAxis(\"drawAxis\",\"y\")){if(v.yticks&&v.yticks.length>0){var x=r.numAxes(),m=[y(\"y\"),y(\"y2\")];v.yticks.forEach(function(t){if(void 0!==t.label){s=_.x;var e=\"y1\",a=m[0];1==t.axis&&(s=_.x+_.w,-1,e=\"y2\",a=m[1]);var n=a(\"axisLabelFontSize\");l=_.y+t.pos*_.h,o=f(t.label,\"y\",2==x?e:null);var r=l-n/2;r<0&&(r=0),r+n+3>c?o.style.bottom=\"0\":o.style.top=r+\"px\",0===t.axis?(o.style.left=_.x-a(\"axisLabelWidth\")-a(\"axisTickSize\")+\"px\",o.style.textAlign=\"right\"):1==t.axis&&(o.style.left=_.x+_.w+a(\"axisTickSize\")+\"px\",o.style.textAlign=\"left\"),o.style.width=a(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.ylabels_.push(o)}});var b=this.ylabels_[0],w=r.getOptionForAxis(\"axisLabelFontSize\",\"y\");parseInt(b.style.top,10)+w>c-w&&(b.style.top=parseInt(b.style.top,10)-w/2+\"px\")}var A;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentXCoord(0);(O>1||O<0||isNaN(O))&&(O=0),A=e(_.x+O*_.w)}else A=e(_.x);h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y\"),h.beginPath(),h.moveTo(A,a(_.y)),h.lineTo(A,a(_.y+_.h)),h.closePath(),h.stroke(),2==r.numAxes()&&(h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"y2\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"y2\"),h.beginPath(),h.moveTo(a(_.x+_.w),a(_.y)),h.lineTo(a(_.x+_.w),a(_.y+_.h)),h.closePath(),h.stroke())}if(r.getOptionForAxis(\"drawAxis\",\"x\")){if(v.xticks){var D=y(\"x\");v.xticks.forEach(function(t){if(void 0!==t.label){s=_.x+t.pos*_.w,l=_.y+_.h,o=f(t.label,\"x\"),o.style.textAlign=\"center\",o.style.top=l+D(\"axisTickSize\")+\"px\";var e=s-D(\"axisLabelWidth\")/2;e+D(\"axisLabelWidth\")>d&&(e=d-D(\"axisLabelWidth\"),o.style.textAlign=\"right\"),e<0&&(e=0,o.style.textAlign=\"left\"),o.style.left=e+\"px\",o.style.width=D(\"axisLabelWidth\")+\"px\",u.appendChild(o),i.xlabels_.push(o)}})}h.strokeStyle=r.getOptionForAxis(\"axisLineColor\",\"x\"),h.lineWidth=r.getOptionForAxis(\"axisLineWidth\",\"x\"),h.beginPath();var E;if(r.getOption(\"drawAxesAtZero\")){var O=r.toPercentYCoord(0,0);(O>1||O<0)&&(O=1),E=a(_.y+O*_.h)}else E=a(_.y+_.h);h.moveTo(e(_.x),E),h.lineTo(e(_.x+_.w),E),h.closePath(),h.stroke()}h.restore()}},a.default=r,e.exports=a.default},{\"../dygraph-utils\":17}],22:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};i.prototype.toString=function(){return\"ChartLabels Plugin\"},i.prototype.activate=function(t){return{layout:this.layout,didDrawChart:this.didDrawChart}};var n=function(t){var e=document.createElement(\"div\");return e.style.position=\"absolute\",e.style.left=t.x+\"px\",e.style.top=t.y+\"px\",e.style.width=t.w+\"px\",e.style.height=t.h+\"px\",e};i.prototype.detachLabels_=function(){for(var t=[this.title_div_,this.xlabel_div_,this.ylabel_div_,this.y2label_div_],e=0;e<t.length;e++){var a=t[e];a&&(a.parentNode&&a.parentNode.removeChild(a))}this.title_div_=null,this.xlabel_div_=null,this.ylabel_div_=null,this.y2label_div_=null};var r=function(t,e,a,i,n){var r=document.createElement(\"div\");r.style.position=\"absolute\",r.style.left=1==a?\"0px\":e.x+\"px\",r.style.top=e.y+\"px\",r.style.width=e.w+\"px\",r.style.height=e.h+\"px\",r.style.fontSize=t.getOption(\"yLabelWidth\")-2+\"px\";var o=document.createElement(\"div\");o.style.position=\"absolute\",o.style.width=e.h+\"px\",o.style.height=e.w+\"px\",o.style.top=e.h/2-e.w/2+\"px\",o.style.left=e.w/2-e.h/2+\"px\",o.className=\"dygraph-label-rotate-\"+(1==a?\"right\":\"left\");var s=document.createElement(\"div\");return s.className=i,s.innerHTML=n,o.appendChild(s),r.appendChild(o),r};i.prototype.layout=function(t){this.detachLabels_();var e=t.dygraph,a=t.chart_div;if(e.getOption(\"title\")){var i=t.reserveSpaceTop(e.getOption(\"titleHeight\"));this.title_div_=n(i),this.title_div_.style.fontSize=e.getOption(\"titleHeight\")-8+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-title\",o.innerHTML=e.getOption(\"title\"),this.title_div_.appendChild(o),a.appendChild(this.title_div_)}if(e.getOption(\"xlabel\")){var s=t.reserveSpaceBottom(e.getOption(\"xLabelHeight\"));this.xlabel_div_=n(s),this.xlabel_div_.style.fontSize=e.getOption(\"xLabelHeight\")-2+\"px\";var o=document.createElement(\"div\");o.className=\"dygraph-label dygraph-xlabel\",o.innerHTML=e.getOption(\"xlabel\"),this.xlabel_div_.appendChild(o),a.appendChild(this.xlabel_div_)}if(e.getOption(\"ylabel\")){var l=t.reserveSpaceLeft(0);this.ylabel_div_=r(e,l,1,\"dygraph-label dygraph-ylabel\",e.getOption(\"ylabel\")),a.appendChild(this.ylabel_div_)}if(e.getOption(\"y2label\")&&2==e.numAxes()){var h=t.reserveSpaceRight(0);this.y2label_div_=r(e,h,2,\"dygraph-label dygraph-y2label\",e.getOption(\"y2label\")),a.appendChild(this.y2label_div_)}},i.prototype.didDrawChart=function(t){var e=t.dygraph;this.title_div_&&(this.title_div_.children[0].innerHTML=e.getOption(\"title\")),this.xlabel_div_&&(this.xlabel_div_.children[0].innerHTML=e.getOption(\"xlabel\")),this.ylabel_div_&&(this.ylabel_div_.children[0].children[0].innerHTML=e.getOption(\"ylabel\")),this.y2label_div_&&(this.y2label_div_.children[0].children[0].innerHTML=e.getOption(\"y2label\"))},i.prototype.clearChart=function(){},i.prototype.destroy=function(){this.detachLabels_()},a.default=i,e.exports=a.default},{}],23:[function(t,e,a){\"use strict\";Object.defineProperty(a,\"__esModule\",{value:!0});var i=function(){};i.prototype.toString=function(){return\"Gridline Plugin\"},i.prototype.activate=function(t){return{willDrawChart:this.willDrawChart}},i.prototype.willDrawChart=function(t){function e(t){return Math.round(t)+.5}function a(t){return Math.round(t)-.5}var i,n,r,o,s=t.dygraph,l=t.drawingContext,h=s.layout_,u=t.dygraph.plotter_.area;if(s.getOptionForAxis(\"drawGrid\",\"y\")){for(var d=[\"y\",\"y2\"],c=[],p=[],g=[],f=[],v=[],r=0;r<d.length;r++)g[r]=s.getOptionForAxis(\"drawGrid\",d[r]),g[r]&&(c[r]=s.getOptionForAxis(\"gridLineColor\",d[r]),p[r]=s.getOptionForAxis(\"gridLineWidth\",d[r]),v[r]=s.getOptionForAxis(\"gridLinePattern\",d[r]),f[r]=v[r]&&v[r].length>=2);o=h.yticks,l.save(),o.forEach(function(t){if(t.has_tick){var r=t.axis;g[r]&&(l.save(),f[r]&&l.setLineDash&&l.setLineDash(v[r]),l.strokeStyle=c[r],l.lineWidth=p[r],i=e(u.x),n=a(u.y+t.pos*u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i+u.w,n),l.stroke(),l.restore())}}),l.restore()}if(s.getOptionForAxis(\"drawGrid\",\"x\")){o=h.xticks,l.save();var v=s.getOptionForAxis(\"gridLinePattern\",\"x\"),f=v&&v.length>=2;f&&l.setLineDash&&l.setLineDash(v),l.strokeStyle=s.getOptionForAxis(\"gridLineColor\",\"x\"),l.lineWidth=s.getOptionForAxis(\"gridLineWidth\",\"x\"),o.forEach(function(t){t.has_tick&&(i=e(u.x+t.pos*u.w),n=a(u.y+u.h),l.beginPath(),l.moveTo(i,n),l.lineTo(i,u.y),l.closePath(),l.stroke())}),f&&l.setLineDash&&l.setLineDash([]),l.restore()}},i.prototype.destroy=function(){},a.default=i,e.exports=a.default},{}],24:[function(t,e,a){\"use strict\";function i(t,e,a){if(!t||t.length<=1)return'<div class=\"dygraph-legend-line\" style=\"border-bottom-color: '+e+';\"></div>';var i,n,r,o,s,l=0,h=0,u=[];for(i=0;i<=t.length;i++)l+=t[i%t.length];if((s=Math.floor(a/(l-t[0])))>1){for(i=0;i<t.length;i++)u[i]=t[i]/a;h=u.length}else{for(s=1,i=0;i<t.length;i++)u[i]=t[i]/l;h=u.length+1}var d=\"\";for(n=0;n<s;n++)for(i=0;i<h;i+=2)r=u[i%u.length],o=i<t.length?u[(i+1)%u.length]:0,d+='<div class=\"dygraph-legend-dash\" style=\"margin-right: '+o+\"em; padding-left: \"+r+'em;\"></div>';return d}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=function(){this.legend_div_=null,this.is_generated_div_=!1};o.prototype.toString=function(){return\"Legend Plugin\"},o.prototype.activate=function(t){var e,a=t.getOption(\"labelsDiv\");return a&&null!==a?e=\"string\"==typeof a||a instanceof String?document.getElementById(a):a:(e=document.createElement(\"div\"),e.className=\"dygraph-legend\",t.graphDiv.appendChild(e),this.is_generated_div_=!0),this.legend_div_=e,this.one_em_width_=10,{select:this.select,deselect:this.deselect,predraw:this.predraw,didDrawChart:this.didDrawChart}};var s=function(t){var e=document.createElement(\"span\");e.setAttribute(\"style\",\"margin: 0; padding: 0 0 0 1em; border: 0;\"),t.appendChild(e);var a=e.offsetWidth;return t.removeChild(e),a},l=function(t){return t.replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\")};o.prototype.select=function(t){var e=t.selectedX,a=t.selectedPoints,i=t.selectedRow,n=t.dygraph.getOption(\"legend\");if(\"never\"===n)return void(this.legend_div_.style.display=\"none\");if(\"follow\"===n){var r=t.dygraph.plotter_.area,s=this.legend_div_.offsetWidth,l=t.dygraph.getOptionForAxis(\"axisLabelWidth\",\"y\"),h=a[0].x*r.w+50,u=a[0].y*r.h-50;h+s+1>r.w&&(h=h-100-s-(l-r.x)),t.dygraph.graphDiv.appendChild(this.legend_div_),this.legend_div_.style.left=l+h+\"px\",this.legend_div_.style.top=u+\"px\"}var d=o.generateLegendHTML(t.dygraph,e,a,this.one_em_width_,i);this.legend_div_.innerHTML=d,this.legend_div_.style.display=\"\"},o.prototype.deselect=function(t){\"always\"!==t.dygraph.getOption(\"legend\")&&(this.legend_div_.style.display=\"none\");var e=s(this.legend_div_);this.one_em_width_=e;var a=o.generateLegendHTML(t.dygraph,void 0,void 0,e,null);this.legend_div_.innerHTML=a},o.prototype.didDrawChart=function(t){this.deselect(t)},o.prototype.predraw=function(t){if(this.is_generated_div_){t.dygraph.graphDiv.appendChild(this.legend_div_);var e=t.dygraph.getArea(),a=this.legend_div_.offsetWidth;this.legend_div_.style.left=e.x+e.w-a-1+\"px\",this.legend_div_.style.top=e.y+\"px\"}},o.prototype.destroy=function(){this.legend_div_=null},o.generateLegendHTML=function(t,e,a,n,s){var h={dygraph:t,x:e,series:[]},u={},d=t.getLabels();if(d)for(var c=1;c<d.length;c++){var p=t.getPropertiesForSeries(d[c]),g=t.getOption(\"strokePattern\",d[c]),f={dashHTML:i(g,p.color,n),label:d[c],labelHTML:l(d[c]),isVisible:p.visible,color:p.color};h.series.push(f),u[d[c]]=f}if(void 0!==e){var v=t.optionsViewForAxis_(\"x\"),_=v(\"valueFormatter\");h.xHTML=_.call(t,e,v,d[0],t,s,0);for(var y=[],x=t.numAxes(),c=0;c<x;c++)y[c]=t.optionsViewForAxis_(\"y\"+(c?1+c:\"\"));var m=t.getOption(\"labelsShowZeroValues\"),b=t.getHighlightSeries();for(c=0;c<a.length;c++){var w=a[c],f=u[w.name];if(f.y=w.yval,0===w.yval&&!m||isNaN(w.canvasy))f.isVisible=!1;else{var p=t.getPropertiesForSeries(w.name),A=y[p.axis-1],O=A(\"valueFormatter\"),D=O.call(t,w.yval,A,w.name,t,s,d.indexOf(w.name));r.update(f,{yHTML:D}),w.name==b&&(f.isHighlighted=!0)}}}return(t.getOption(\"legendFormatter\")||o.defaultFormatter).call(t,h)},o.defaultFormatter=function(t){var e=t.dygraph;if(!0!==e.getOption(\"showLabelsOnHighlight\"))return\"\";var a,i=e.getOption(\"labelsSeparateLines\");if(void 0===t.x){if(\"always\"!=e.getOption(\"legend\"))return\"\";a=\"\";for(var n=0;n<t.series.length;n++){var r=t.series[n];r.isVisible&&(\"\"!==a&&(a+=i?\"<br/>\":\" \"),a+=\"<span style='font-weight: bold; color: \"+r.color+\";'>\"+r.dashHTML+\" \"+r.labelHTML+\"</span>\")}return a}a=t.xHTML+\":\";for(var n=0;n<t.series.length;n++){var r=t.series[n];if(r.isVisible){i&&(a+=\"<br>\");a+=\"<span\"+(r.isHighlighted?' class=\"highlight\"':\"\")+\"> <b><span style='color: \"+r.color+\";'>\"+r.labelHTML+\"</span></b>:&#160;\"+r.yHTML+\"</span>\"}}return a},a.default=o,e.exports=a.default},{\"../dygraph-utils\":17}],25:[function(t,e,a){\"use strict\";function i(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(\"../dygraph-utils\"),r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a]);return e.default=t,e}(n),o=t(\"../dygraph-interaction-model\"),s=i(o),l=t(\"../iframe-tarp\"),h=i(l),u=function(){this.hasTouchInterface_=\"undefined\"!=typeof TouchEvent,this.isMobileDevice_=/mobile|android/gi.test(navigator.appVersion),this.interfaceCreated_=!1};u.prototype.toString=function(){return\"RangeSelector Plugin\"},u.prototype.activate=function(t){return this.dygraph_=t,this.getOption_(\"showRangeSelector\")&&this.createInterface_(),{layout:this.reserveSpace_,predraw:this.renderStaticLayer_,didDrawChart:this.renderInteractiveLayer_}},u.prototype.destroy=function(){this.bgcanvas_=null,this.fgcanvas_=null,this.leftZoomHandle_=null,this.rightZoomHandle_=null},u.prototype.getOption_=function(t,e){return this.dygraph_.getOption(t,e)},u.prototype.setDefaultOption_=function(t,e){this.dygraph_.attrs_[t]=e},u.prototype.createInterface_=function(){this.createCanvases_(),this.createZoomHandles_(),this.initInteraction_(),this.getOption_(\"animatedZooms\")&&(console.warn(\"Animated zooms and range selector are not compatible; disabling animatedZooms.\"),this.dygraph_.updateOptions({animatedZooms:!1},!0)),this.interfaceCreated_=!0,this.addToGraph_()},u.prototype.addToGraph_=function(){var t=this.graphDiv_=this.dygraph_.graphDiv;t.appendChild(this.bgcanvas_),t.appendChild(this.fgcanvas_),t.appendChild(this.leftZoomHandle_),t.appendChild(this.rightZoomHandle_)},u.prototype.removeFromGraph_=function(){var t=this.graphDiv_;t.removeChild(this.bgcanvas_),t.removeChild(this.fgcanvas_),t.removeChild(this.leftZoomHandle_),t.removeChild(this.rightZoomHandle_),this.graphDiv_=null},u.prototype.reserveSpace_=function(t){this.getOption_(\"showRangeSelector\")&&t.reserveSpaceBottom(this.getOption_(\"rangeSelectorHeight\")+4)},u.prototype.renderStaticLayer_=function(){this.updateVisibility_()&&(this.resize_(),this.drawStaticLayer_())},u.prototype.renderInteractiveLayer_=function(){this.updateVisibility_()&&!this.isChangingRange_&&(this.placeZoomHandles_(),this.drawInteractiveLayer_())},u.prototype.updateVisibility_=function(){var t=this.getOption_(\"showRangeSelector\");if(t)this.interfaceCreated_?this.graphDiv_&&this.graphDiv_.parentNode||this.addToGraph_():this.createInterface_();else if(this.graphDiv_){this.removeFromGraph_();var e=this.dygraph_;setTimeout(function(){e.width_=0,e.resize()},1)}return t},u.prototype.resize_=function(){function t(t,e,a,i){var n=i||r.getContextPixelRatio(e);t.style.top=a.y+\"px\",t.style.left=a.x+\"px\",t.width=a.w*n,t.height=a.h*n,t.style.width=a.w+\"px\",t.style.height=a.h+\"px\",1!=n&&e.scale(n,n)}var e=this.dygraph_.layout_.getPlotArea(),a=0;this.dygraph_.getOptionForAxis(\"drawAxis\",\"x\")&&(a=this.getOption_(\"xAxisHeight\")||this.getOption_(\"axisLabelFontSize\")+2*this.getOption_(\"axisTickSize\")),this.canvasRect_={x:e.x,y:e.y+e.h+a+4,w:e.w,h:this.getOption_(\"rangeSelectorHeight\")};var i=this.dygraph_.getNumericOption(\"pixelRatio\");t(this.bgcanvas_,this.bgcanvas_ctx_,this.canvasRect_,i),t(this.fgcanvas_,this.fgcanvas_ctx_,this.canvasRect_,i)},u.prototype.createCanvases_=function(){this.bgcanvas_=r.createCanvas(),this.bgcanvas_.className=\"dygraph-rangesel-bgcanvas\",this.bgcanvas_.style.position=\"absolute\",this.bgcanvas_.style.zIndex=9,this.bgcanvas_ctx_=r.getContext(this.bgcanvas_),this.fgcanvas_=r.createCanvas(),this.fgcanvas_.className=\"dygraph-rangesel-fgcanvas\",this.fgcanvas_.style.position=\"absolute\",this.fgcanvas_.style.zIndex=9,this.fgcanvas_.style.cursor=\"default\",this.fgcanvas_ctx_=r.getContext(this.fgcanvas_)},u.prototype.createZoomHandles_=function(){var t=new Image;t.className=\"dygraph-rangesel-zoomhandle\",t.style.position=\"absolute\",t.style.zIndex=10,t.style.visibility=\"hidden\",t.style.cursor=\"col-resize\",t.width=9,t.height=16,t.src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAYAAADESFVDAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAzwDP4Z7KegAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAAd0SU1FB9sHGw0cMqdt1UwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAaElEQVQoz+3SsRFAQBCF4Z9WJM8KCDVwownl6YXsTmCUsyKGkZzcl7zkz3YLkypgAnreFmDEpHkIwVOMfpdi9CEEN2nGpFdwD03yEqDtOgCaun7sqSTDH32I1pQA2Pb9sZecAxc5r3IAb21d6878xsAAAAAASUVORK5CYII=\",this.isMobileDevice_&&(t.width*=2,t.height*=2),this.leftZoomHandle_=t,this.rightZoomHandle_=t.cloneNode(!1)},u.prototype.initInteraction_=function(){var t,e,a,i,n,o,l,u,d,c,p,g,f,v,_=this,y=document,x=0,m=null,b=!1,w=!1,A=!this.isMobileDevice_,O=new h.default;t=function(t){var e=_.dygraph_.xAxisExtremes(),a=(e[1]-e[0])/_.canvasRect_.w;return[e[0]+(t.leftHandlePos-_.canvasRect_.x)*a,e[0]+(t.rightHandlePos-_.canvasRect_.x)*a]},e=function(t){return r.cancelEvent(t),b=!0,x=t.clientX,m=t.target?t.target:t.srcElement,\"mousedown\"!==t.type&&\"dragstart\"!==t.type||(r.addEvent(y,\"mousemove\",a),r.addEvent(y,\"mouseup\",i)),_.fgcanvas_.style.cursor=\"col-resize\",O.cover(),!0},a=function(t){if(!b)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a,i=_.getZoomHandleStatus_();m==_.leftZoomHandle_?(a=i.leftHandlePos+e,a=Math.min(a,i.rightHandlePos-m.width-3),a=Math.max(a,_.canvasRect_.x)):(a=i.rightHandlePos+e,a=Math.min(a,_.canvasRect_.x+_.canvasRect_.w),a=Math.max(a,i.leftHandlePos+m.width+3));var o=m.width/2;return m.style.left=a-o+\"px\",_.drawInteractiveLayer_(),A&&n(),!0},i=function(t){return!!b&&(b=!1,O.uncover(),r.removeEvent(y,\"mousemove\",a),r.removeEvent(y,\"mouseup\",i),_.fgcanvas_.style.cursor=\"default\",A||n(),!0)},n=function(){try{var e=_.getZoomHandleStatus_();if(_.isChangingRange_=!0,e.isZoomed){var a=t(e);_.dygraph_.doZoomXDates_(a[0],a[1])}else _.dygraph_.resetZoom()}finally{_.isChangingRange_=!1}},o=function(t){var e=_.leftZoomHandle_.getBoundingClientRect(),a=e.left+e.width/2;e=_.rightZoomHandle_.getBoundingClientRect();var i=e.left+e.width/2;return t.clientX>a&&t.clientX<i},l=function(t){return!(w||!o(t)||!_.getZoomHandleStatus_().isZoomed)&&(r.cancelEvent(t),w=!0,x=t.clientX,\"mousedown\"===t.type&&(r.addEvent(y,\"mousemove\",u),r.addEvent(y,\"mouseup\",d)),!0)},u=function(t){if(!w)return!1;r.cancelEvent(t);var e=t.clientX-x;if(Math.abs(e)<4)return!0;x=t.clientX;var a=_.getZoomHandleStatus_(),i=a.leftHandlePos,n=a.rightHandlePos,o=n-i;i+e<=_.canvasRect_.x?(i=_.canvasRect_.x,n=i+o):n+e>=_.canvasRect_.x+_.canvasRect_.w?(n=_.canvasRect_.x+_.canvasRect_.w,i=n-o):(i+=e,n+=e);var s=_.leftZoomHandle_.width/2;return _.leftZoomHandle_.style.left=i-s+\"px\",_.rightZoomHandle_.style.left=n-s+\"px\",_.drawInteractiveLayer_(),A&&c(),!0},d=function(t){return!!w&&(w=!1,r.removeEvent(y,\"mousemove\",u),r.removeEvent(y,\"mouseup\",d),A||c(),!0)},c=function(){try{_.isChangingRange_=!0,_.dygraph_.dateWindow_=t(_.getZoomHandleStatus_()),_.dygraph_.drawGraph_(!1)}finally{_.isChangingRange_=!1}},p=function(t){if(!b&&!w){var e=o(t)?\"move\":\"default\";e!=_.fgcanvas_.style.cursor&&(_.fgcanvas_.style.cursor=e)}},g=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?e(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?a(t.targetTouches[0])&&r.cancelEvent(t):i(t)},f=function(t){\"touchstart\"==t.type&&1==t.targetTouches.length?l(t.targetTouches[0])&&r.cancelEvent(t):\"touchmove\"==t.type&&1==t.targetTouches.length?u(t.targetTouches[0])&&r.cancelEvent(t):d(t)},v=function(t,e){for(var a=[\"touchstart\",\"touchend\",\"touchmove\",\"touchcancel\"],i=0;i<a.length;i++)_.dygraph_.addAndTrackEvent(t,a[i],e)},this.setDefaultOption_(\"interactionModel\",s.default.dragIsPanInteractionModel),this.setDefaultOption_(\"panEdgeFraction\",1e-4);var D=window.opera?\"mousedown\":\"dragstart\";this.dygraph_.addAndTrackEvent(this.leftZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.rightZoomHandle_,D,e),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousedown\",l),this.dygraph_.addAndTrackEvent(this.fgcanvas_,\"mousemove\",p),this.hasTouchInterface_&&(v(this.leftZoomHandle_,g),v(this.rightZoomHandle_,g),v(this.fgcanvas_,f))},u.prototype.drawStaticLayer_=function(){var t=this.bgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);try{this.drawMiniPlot_()}catch(t){console.warn(t)}this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorBackgroundLineWidth\"),t.strokeStyle=this.getOption_(\"rangeSelectorBackgroundStrokeColor\"),t.beginPath(),t.moveTo(.5,.5),t.lineTo(.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,this.canvasRect_.h-.5),t.lineTo(this.canvasRect_.w-.5,.5),t.stroke()},u.prototype.drawMiniPlot_=function(){var t=this.getOption_(\"rangeSelectorPlotFillColor\"),e=this.getOption_(\"rangeSelectorPlotFillGradientColor\"),a=this.getOption_(\"rangeSelectorPlotStrokeColor\");if(t||a){var i=this.getOption_(\"stepPlot\"),n=this.computeCombinedSeriesAndLimits_(),r=n.yMax-n.yMin,o=this.bgcanvas_ctx_,s=this.dygraph_.xAxisExtremes(),l=Math.max(s[1]-s[0],1e-30),h=(this.canvasRect_.w-.5)/l,u=(this.canvasRect_.h-.5)/r,d=this.canvasRect_.w-.5,c=this.canvasRect_.h-.5,p=null,g=null;o.beginPath(),o.moveTo(.5,c);for(var f=0;f<n.data.length;f++){var v=n.data[f],_=null!==v[0]?(v[0]-s[0])*h:NaN,y=null!==v[1]?c-(v[1]-n.yMin)*u:NaN;(i||null===p||Math.round(_)!=Math.round(p))&&(isFinite(_)&&isFinite(y)?(null===p?o.lineTo(_,c):i&&o.lineTo(_,g),o.lineTo(_,y),p=_,g=y):(null!==p&&(i?(o.lineTo(_,g),o.lineTo(_,c)):o.lineTo(p,c)),p=g=null))}if(o.lineTo(d,c),o.closePath(),t){var x=this.bgcanvas_ctx_.createLinearGradient(0,0,0,c);e&&x.addColorStop(0,e),x.addColorStop(1,t),this.bgcanvas_ctx_.fillStyle=x,o.fill()}a&&(this.bgcanvas_ctx_.strokeStyle=a,this.bgcanvas_ctx_.lineWidth=this.getOption_(\"rangeSelectorPlotLineWidth\"),o.stroke())}},u.prototype.computeCombinedSeriesAndLimits_=function(){var t,e=this.dygraph_,a=this.getOption_(\"logscale\"),i=e.numColumns(),n=e.getLabels(),o=new Array(i),s=!1,l=e.visibility(),h=[];for(t=1;t<i;t++){var u=this.getOption_(\"showInRangeSelector\",n[t]);h.push(u),null!==u&&(s=!0)}if(s)for(t=1;t<i;t++)o[t]=h[t-1];else for(t=1;t<i;t++)o[t]=l[t-1];var d=[],c=e.dataHandler_,p=e.attributes_;for(t=1;t<e.numColumns();t++)if(o[t]){var g=c.extractSeries(e.rawData_,t,p);e.rollPeriod()>1&&(g=c.rollingAverage(g,e.rollPeriod(),p)),d.push(g)}var f=[];for(t=0;t<d[0].length;t++){for(var v=0,_=0,y=0;y<d.length;y++){var x=d[y][t][1];null===x||isNaN(x)||(_++,v+=x)}f.push([d[0][t][0],v/_])}var m=Number.MAX_VALUE,b=-Number.MAX_VALUE;for(t=0;t<f.length;t++){var w=f[t][1];null!==w&&isFinite(w)&&(!a||w>0)&&(m=Math.min(m,w),b=Math.max(b,w))}if(a)for(b=r.log10(b),b+=.25*b,m=r.log10(m),t=0;t<f.length;t++)f[t][1]=r.log10(f[t][1]);else{var A,O=b-m;A=O<=Number.MIN_VALUE?.25*b:.25*O,b+=A,m-=A}return{data:f,yMin:m,yMax:b}},u.prototype.placeZoomHandles_=function(){var t=this.dygraph_.xAxisExtremes(),e=this.dygraph_.xAxisRange(),a=t[1]-t[0],i=Math.max(0,(e[0]-t[0])/a),n=Math.max(0,(t[1]-e[1])/a),r=this.canvasRect_.x+this.canvasRect_.w*i,o=this.canvasRect_.x+this.canvasRect_.w*(1-n),s=Math.max(this.canvasRect_.y,this.canvasRect_.y+(this.canvasRect_.h-this.leftZoomHandle_.height)/2),l=this.leftZoomHandle_.width/2;this.leftZoomHandle_.style.left=r-l+\"px\",this.leftZoomHandle_.style.top=s+\"px\",this.rightZoomHandle_.style.left=o-l+\"px\",this.rightZoomHandle_.style.top=this.leftZoomHandle_.style.top,this.leftZoomHandle_.style.visibility=\"visible\",this.rightZoomHandle_.style.visibility=\"visible\"},u.prototype.drawInteractiveLayer_=function(){var t=this.fgcanvas_ctx_;t.clearRect(0,0,this.canvasRect_.w,this.canvasRect_.h);var e=this.canvasRect_.w-1,a=this.canvasRect_.h-1,i=this.getZoomHandleStatus_();if(t.strokeStyle=this.getOption_(\"rangeSelectorForegroundStrokeColor\"),t.lineWidth=this.getOption_(\"rangeSelectorForegroundLineWidth\"),i.isZoomed){var n=Math.max(1,i.leftHandlePos-this.canvasRect_.x),r=Math.min(e,i.rightHandlePos-this.canvasRect_.x);t.fillStyle=\"rgba(240, 240, 240, \"+this.getOption_(\"rangeSelectorAlpha\").toString()+\")\",t.fillRect(0,0,n,this.canvasRect_.h),t.fillRect(r,0,this.canvasRect_.w-r,this.canvasRect_.h),t.beginPath(),t.moveTo(1,1),t.lineTo(n,1),t.lineTo(n,a),t.lineTo(r,a),t.lineTo(r,1),t.lineTo(e,1),t.stroke()}else t.beginPath(),t.moveTo(1,1),t.lineTo(1,a),t.lineTo(e,a),t.lineTo(e,1),t.stroke()},u.prototype.getZoomHandleStatus_=function(){var t=this.leftZoomHandle_.width/2,e=parseFloat(this.leftZoomHandle_.style.left)+t,a=parseFloat(this.rightZoomHandle_.style.left)+t;return{leftHandlePos:e,rightHandlePos:a,isZoomed:e-1>this.canvasRect_.x||a+1<this.canvasRect_.x+this.canvasRect_.w}},a.default=u,e.exports=a.default},{\"../dygraph-interaction-model\":12,\"../dygraph-utils\":17,\"../iframe-tarp\":19}]},{},[18])(18)});\n//# sourceMappingURL=dist/dygraph.min.js.map\n","import { 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(\"text\")};\n font-weight: ${({ error }) => error && \"bold\"};\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 { getColor, 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 & > svg use {\n fill: ${getColor([\"gray\", \"limedSpruce\"])};\n }\n`\n\nexport const NotificationLink = styled.a`\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 success: false,\n leftContent: (\n <S.NodeIconContainer>\n <Icon name=\"gear\" size=\"large\" />\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 success: false,\n leftContent: (\n <S.NodeIconContainer>\n <Icon name=\"gear\" size=\"large\" />\n </S.NodeIconContainer>\n ),\n })\n toast.error(notificationComponent, toastOptions)\n}\n","import {\n mergeAll, pipe, split, mergeRight,\n} from \"ramda\"\nimport { mapIndexed } from \"ramda-adjunct\"\n\nconst defaultUrlOptions = {\n hash: \"#\",\n theme: null,\n help: null,\n mode: \"live\", // 'live', 'print'\n update_always: false,\n pan_and_zoom: false,\n server: null,\n after: 0,\n before: 0,\n highlight: false,\n highlight_after: 0,\n highlight_before: 0,\n nowelcome: false,\n show_alarms: false,\n chart: null,\n family: null,\n alarm: null,\n alarm_unique_id: 0,\n alarm_id: 0,\n alarm_event_id: 0,\n alarm_when: 0,\n} as {[key: string]: unknown}\n\nconst isInvalidPair = ([key, value]: [string, string]) => (\n defaultUrlOptions[key] === undefined || value === undefined\n)\n\nconst parseQueryPair = ([key, value]: [string, string]): {[key: string] : unknown} => {\n if (isInvalidPair([key, value])) {\n return {}\n }\n return {\n [key]: decodeURIComponent(value),\n }\n}\n\nexport const parseUrl = pipe(\n split(\";\"),\n mapIndexed((value, index) => (\n (index === 0) ? { hash: value } : parseQueryPair((value.split(\"=\") as [string, string]))\n )),\n mergeAll,\n mergeRight(defaultUrlOptions),\n)\n\nconst urlParsed = parseUrl(document.location.hash)\n\nexport const isPrintMode = urlParsed.mode === \"print\"\n","import {\n call,\n put,\n takeEvery,\n select,\n spawn,\n take,\n delay,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { Action } from \"redux-act\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { alwaysEndWithSlash, serverDefault } from \"utils/server-detection\"\nimport { getFetchStream } from \"utils/netdata-sdk\"\nimport { isMainJs } from \"utils/env\"\nimport { fillMissingData, transformResults } from \"utils/fill-missing-data\"\nimport {\n showCloudInstallationProblemNotification, showCloudConnectionProblemNotification,\n} from \"components/notifications\"\nimport { selectGlobalPanAndZoom, selectSnapshot, selectRegistry } from \"domains/global/selectors\"\nimport { StateT as GlobalStateT } from \"domains/global/reducer\"\nimport { stopSnapshotModeAction } from \"domains/dashboard/actions\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { INFO_POLLING_FREQUENCY } from \"domains/global/constants\"\n\nimport {\n fetchDataAction,\n FetchDataPayload,\n fetchChartAction,\n FetchChartPayload,\n fetchDataForSnapshotAction,\n FetchDataForSnapshotPayload,\n fetchInfoAction,\n FetchInfoPayload,\n fetchDataCancelAction,\n} from \"./actions\"\nimport { ChartData } from \"./chart-types\"\n\nconst CONCURRENT_CALLS_LIMIT_METRICS = isMainJs ? 30 : 60\nconst CONCURRENT_CALLS_LIMIT_PRINT = 2\nconst CONCURRENT_CALLS_LIMIT_SNAPSHOTS = 1\n\nconst fetchDataResponseChannel = channel()\n\nexport function* watchFetchDataResponseChannel() {\n while (true) {\n const action = (yield take(fetchDataResponseChannel))\n\n // special case - if requested relative timeRange, and during request the mode has been changed\n // to absolute global-pan-and-zoom, cancel the store update\n // todo do xss check of data\n if (action.type === fetchDataAction.success.toString()) {\n const payload = (action.payload as FetchDataPayload)\n const { viewRange } = payload.fetchDataParams\n const [start, end] = viewRange\n const globalPanAndZoom = (yield select(\n selectGlobalPanAndZoom,\n )) as GlobalStateT[\"globalPanAndZoom\"]\n\n if (globalPanAndZoom\n && (start <= 0 || end <= 0) // check if they are not timestamps\n ) {\n yield put(fetchDataCancelAction({\n id: payload.id,\n }))\n // eslint-disable-next-line no-continue\n continue\n }\n }\n\n yield put(action)\n }\n}\n\n// todo construct a new version of key that will be safer to be used in future\n// (while keeping old key supported for some time)\n// perhaps the key could be passed as attribute to the chart, to avoid matching\nconst constructCompatibleKey = (dimensions: undefined | string, options: string) => (\n // strange transformations for backwards compatibility. old snapshot keys were encoded this way\n // that empty dimensions were actually \"null\" string\n `${dimensions === undefined\n ? \"null\"\n : encodeURIComponent(dimensions)\n },${encodeURIComponent(options)}`\n)\n\n// currently BE always transforms data as if `flip` was there\nconst IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS = false\n\nconst getGroupByValues = (groupBy) => {\n if (groupBy === \"chart\") return \"node\"\n if (groupBy === \"node\" || groupBy === \"dimension\") return groupBy\n return `label=${groupBy}`\n}\n\nconst [fetchMetrics$] = getFetchStream(\n isPrintMode ? CONCURRENT_CALLS_LIMIT_PRINT : CONCURRENT_CALLS_LIMIT_METRICS,\n)\nfunction* fetchDataSaga({ payload }: Action<FetchDataPayload>) {\n const {\n // props for api\n host, context, chart, format, points, group, gtime, options,\n after, before, dimensions, labels, postGroupBy, postAggregationMethod,\n aggrMethod, dimensionsAggrMethod, nodeIDs, httpMethod,\n groupBy = \"dimension\", // group by node, dimension, or label keys\n aggrGroups = [],\n // props for the store\n fetchDataParams, id, cancelTokenSource,\n } = payload\n\n const snapshot = yield select(selectSnapshot)\n if (snapshot) {\n // if reading snapshot\n const dimensionsWithUrlOptions = constructCompatibleKey(dimensions, options)\n const matchingKey = Object.keys(snapshot.data).find((snapshotKey) => (\n snapshotKey.startsWith(chart) && snapshotKey.includes(dimensionsWithUrlOptions)\n ))\n if (!matchingKey) {\n // eslint-disable-next-line no-console\n console.warn(`Could not find snapshot key for chart: ${chart} and id ${id}`)\n return\n }\n const data = snapshot.data[matchingKey]\n yield put(fetchDataAction.success({\n chartData: data,\n fetchDataParams,\n id,\n }))\n return\n }\n\n const url = isMainJs\n ? `${alwaysEndWithSlash(host)}api/v1/data`\n : host\n\n const agentOptionsOriginal = options.split(\"|\")\n const hasFlip = agentOptionsOriginal.includes(\"flip\")\n const shouldAddFakeFlip = !IS_FLIP_RESPECTED_IN_COMPOSITE_CHARTS && !hasFlip\n // if flip is not respected in composite-charts, send it always (like dygraph charts normally do)\n const agentOptions = shouldAddFakeFlip\n ? agentOptionsOriginal.concat(\"flip\") : agentOptionsOriginal\n\n const groupValues = [\n getGroupByValues(groupBy),\n postGroupBy && `label=${postGroupBy}`,\n ].filter(Boolean)\n\n const axiosOptions = httpMethod === \"POST\" ? {\n // used by cloud's room-overview\n data: {\n filter: {\n nodeIDs,\n context,\n dimensions: dimensions ? dimensions.split(/['|]/) : undefined,\n labels,\n },\n after,\n before,\n points,\n group,\n gtime,\n agent_options: agentOptions,\n ...(postAggregationMethod && { post_aggregation_methods: [postAggregationMethod] }),\n aggregations: [groupBy !== \"dimension\" && {\n method: dimensionsAggrMethod || \"sum\",\n groupBy: [\"chart\", ...groupValues],\n },\n groupBy !== \"chart\" && {\n method: aggrMethod,\n groupBy: groupValues,\n ...(aggrGroups.length && { labels: aggrGroups }),\n }].filter(Boolean),\n },\n } : {\n params: {\n chart,\n _: new Date().valueOf(),\n format,\n points,\n group,\n gtime,\n options,\n after,\n before,\n dimensions,\n },\n }\n\n const onSuccessCallback = (data: { [id: string]: unknown}) => {\n if (!data?.result) {\n fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n } else {\n const { fillMissingPoints } = fetchDataParams\n\n const transformedResults = transformResults(\n (data as unknown) as ChartData,\n format,\n shouldAddFakeFlip,\n )\n\n const chartData = {\n ...transformedResults,\n // @ts-ignore\n ...((\"post_aggregated_data\" in data.result) && {\n postAggregationMethod,\n groupBy,\n postGroupBy,\n aggrGroups,\n // @ts-ignore\n postAggregated: data.result.post_aggregated_data[postAggregationMethod],\n }),\n }\n\n fetchDataResponseChannel.put(fetchDataAction.success({\n chartData: fillMissingPoints\n ? fillMissingData(chartData as ChartData, fillMissingPoints)\n : chartData,\n fetchDataParams,\n id,\n }))\n }\n }\n\n const onErrorCallback = (error: Error) => {\n console.warn(\"fetch chart data failure\", error) // eslint-disable-line no-console\n fetchDataResponseChannel.put(fetchDataAction.failure({ id }))\n }\n\n fetchMetrics$.next({\n ...axiosOptions,\n method: httpMethod || \"GET\",\n url,\n onErrorCallback,\n onSuccessCallback,\n cancelTokenSource,\n })\n}\n\nconst [fetchForSnapshot$, resetFetchForSnapshot$] = getFetchStream(CONCURRENT_CALLS_LIMIT_SNAPSHOTS)\nfunction fetchDataForSnapshotSaga({ payload }: Action<FetchDataForSnapshotPayload>) {\n const {\n host, chart, format, points, group, gtime, options,\n after, before, dimensions, aggrMethod,\n groupBy,\n nodeIDs,\n chartLibrary, id,\n } = payload\n\n // backwards-compatibility, the keys look like this:\n // net_errors.stf0,dygraph,null,ms%7Cflip%7Cjsonwrap%7Cnonzero\n const chartDataUniqueID = `${chart},${chartLibrary},${constructCompatibleKey(\n dimensions,\n options,\n )}`\n\n const url = `${alwaysEndWithSlash(host)}api/v1/data`\n const params = {\n chart,\n _: new Date().valueOf(),\n format,\n points,\n group,\n gtime,\n options,\n after,\n before,\n dimensions,\n ...(aggrMethod && { aggr_method: aggrMethod }),\n ...(nodeIDs && { node_ids: nodeIDs.join(\",\") }),\n ...(groupBy && { groupBy }),\n }\n\n const onSuccessCallback = (data: unknown) => {\n fetchDataResponseChannel.put(fetchDataForSnapshotAction.success({\n snapshotData: data,\n id,\n }))\n // temporarly, until main.js finished rewrite\n // @ts-ignore\n window.chartUpdated({\n chartDataUniqueID,\n data,\n })\n }\n\n const onErrorCallback = () => {\n fetchDataResponseChannel.put(fetchDataForSnapshotAction.failure({ id }))\n // @ts-ignore\n window.chartUpdated({\n chartDataUniqueID,\n chart,\n data: null,\n })\n }\n\n fetchForSnapshot$.next({\n url,\n params,\n onErrorCallback,\n onSuccessCallback,\n })\n}\n\nfunction stopSnapshotModeSaga() {\n // any calls in the queue should stop when save-snapshot modal is closed\n resetFetchForSnapshot$.next()\n}\n\nfunction* fetchChartSaga({ payload }: Action<FetchChartPayload>) {\n const { chart, id, host } = payload\n\n const snapshot = yield select(selectSnapshot)\n if (snapshot) {\n yield put(fetchChartAction.success({\n chartMetadata: snapshot.charts.charts[chart],\n id,\n }))\n return\n }\n\n let response\n const url = isMainJs\n ? `${alwaysEndWithSlash(host)}api/v1/chart`\n : host.replace(\"/data\", \"/chart\")\n try {\n response = yield call(axiosInstance.get, url, {\n params: {\n chart,\n },\n })\n } catch (e) {\n console.warn(\"fetch chart details failure\") // eslint-disable-line no-console\n yield put(fetchChartAction.failure({ id }))\n return\n }\n yield put(fetchChartAction.success({\n chartMetadata: response.data,\n id,\n }))\n}\n\nfunction* fetchInfoSaga({ payload }: Action<FetchInfoPayload>) {\n const { poll } = payload\n let isCloudEnabled = false\n let isAgentClaimed = false\n let isCloudAvailable = false\n let isACLKAvailable = false\n\n try {\n const registry: GlobalStateT[\"registry\"] = yield select(selectRegistry)\n const wasCloudAvailable = registry?.isCloudAvailable\n const wasACLKAvailable = registry?.isACLKAvailable\n\n const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/info`)\n isCloudAvailable = data?.[\"cloud-available\"] || false\n isCloudEnabled = data?.[\"cloud-enabled\"] || false\n isAgentClaimed = data?.[\"agent-claimed\"] || false\n isACLKAvailable = data?.[\"aclk-available\"] || false\n\n yield put(fetchInfoAction.success({\n isCloudAvailable, isCloudEnabled, isAgentClaimed, isACLKAvailable, fullInfoPayload: data,\n }))\n\n if (isCloudEnabled && (wasCloudAvailable === null) && !isCloudAvailable) {\n // show only once per session\n showCloudInstallationProblemNotification()\n }\n if (isCloudAvailable && isAgentClaimed && (wasACLKAvailable !== false) && !isACLKAvailable) {\n // show at session-init and if we see a change of isACLKAvailable from true to false\n showCloudConnectionProblemNotification()\n }\n // TODO: No success notification spec`ed?\n // else if (!wasACLKAvailable && isACLKAvailable) {\n // toast.success(\"Connected to the Cloud!\", {\n // position: \"bottom-right\",\n // type: toast.TYPE.SUCCESS,\n // autoClose: NOTIFICATIONS_TIMEOUT,\n // })\n // }\n } catch (e) {\n console.warn(\"fetch agent info failure\") // eslint-disable-line no-console\n yield put(fetchInfoAction.failure())\n }\n\n if (poll && isCloudEnabled && isAgentClaimed) {\n yield delay(INFO_POLLING_FREQUENCY)\n yield put(fetchInfoAction({ poll: true }))\n }\n}\n\n\nexport function* chartSagas() {\n yield takeEvery(fetchDataAction.request, fetchDataSaga)\n yield takeEvery(fetchChartAction.request, fetchChartSaga)\n yield takeEvery(fetchDataForSnapshotAction.request, fetchDataForSnapshotSaga)\n yield takeEvery(stopSnapshotModeAction, stopSnapshotModeSaga)\n yield takeEvery(fetchInfoAction.request, fetchInfoSaga)\n yield spawn(watchFetchDataResponseChannel)\n}\n","export const sidePanelTransitionTimeInSeconds = 0.2\n","import { sortBy, prop, last } from \"ramda\"\nimport { Action } from \"redux-act\"\nimport {\n call, delay, spawn, take, takeEvery, put,\n} from \"redux-saga/effects\"\n\nimport { axiosInstance } from \"utils/api\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { name2id } from \"utils/name-2-id\"\n\nimport {\n startAlarmsAction, StartAlarmsPayload, fetchAllAlarmsAction, updateActiveAlarmsAction,\n} from \"./actions\"\nimport { AlarmLogs, AlarmLog, ActiveAlarms } from \"./types\"\n\nconst ALARMS_INITIALIZATION_DELAY = 1000\nconst ALARMS_UPDATE_EVERY = 10000 // the time in ms between alarm checks\nconst CHART_DIV_OFFSET = -50\n\n// firefox moves the alarms off-screen (above, outside the top of the screen)\n// if alarms are shown faster than: one per 500ms\nconst ALARMS_MS_BETWEEN_NOTIFICATIONS = 500\n\n// equal to old NETDATA.alarms.notifications\nconst areNotificationsAvailable = \"Notification\" in window\n\nconst notificationCallback = window.netdataAlarmsNotifCallback\n\n\n// todo this doesnt change in the session, but should be moved to the redux state anyway\nlet firstNotificationId = 0\nlet lastNotificationId = 0\n\n\nconst scrollToChart = (chartID: unknown): boolean => {\n if (typeof chartID === \"string\") {\n const chartElement = document.querySelector(`#chart_${name2id(chartID)}`)\n if (chartElement) {\n const offset = (chartElement as HTMLDivElement).offsetTop + CHART_DIV_OFFSET;\n (document.querySelector(\"html\") as HTMLElement).scrollTop = offset\n return true\n }\n }\n return false\n}\n\n// perhaps sagas are not the best place for this\nconst scrollToAlarm = (alarm: AlarmLog) => {\n if (typeof alarm === \"object\") {\n const hasFoundChart = scrollToChart(alarm.chart)\n if (hasFoundChart) {\n window.focus()\n }\n }\n}\n\nconst requestPermissions = () => {\n if (areNotificationsAvailable) {\n if (Notification.permission === \"default\") {\n Notification.requestPermission()\n }\n }\n}\n\nconst hasGivenNotificationPermissions = () => (areNotificationsAvailable\n && Notification.permission === \"granted\"\n)\n\nfunction* getLog(lastNotificationIdArg: number, serverDefault: string) {\n try {\n const { data } = yield call(\n axiosInstance.get,\n `${serverDefault}/api/v1/alarm_log?after=${lastNotificationIdArg}`,\n )\n // todo xss check\n return data\n } catch (error) {\n console.warn(\"Error fetching alarms log\", error) // eslint-disable-line no-console\n return null\n }\n}\n\ninterface NotificationConfig {\n notificationTitle: string\n notificationOptions: NotificationOptions\n notificationHandler: (event: Event) => void\n}\n// called \"notify\" in old codebase\nconst getNotification = (\n entry: AlarmLog, activeAlarms: ActiveAlarms, firstNotificationIdArg: number,\n): NotificationConfig | undefined => {\n if (entry.updated) {\n // has been updated by another alarm\n return\n }\n\n let valueString = entry.value_string\n const t = activeAlarms.alarms[`${entry.chart}.${entry.name}`]\n if (typeof t !== \"undefined\"\n && entry.status === t.status\n && typeof t.value_string !== \"undefined\"\n ) {\n valueString = t.value_string\n }\n\n const name = entry.name.replace(/_/g, \" \")\n let status = entry.status.toLowerCase()\n let title = `${name} = ${valueString}`\n const tag = entry.alarm_id\n let icon = \"images/banner-icon-144x144.png\"\n let interaction = false\n let show = true\n\n // switch/case left here to simplify refractor (it's very similar to old code)\n switch (entry.status) {\n case \"REMOVED\":\n show = false\n break\n\n case \"UNDEFINED\":\n return\n\n case \"UNINITIALIZED\":\n return\n\n case \"CLEAR\":\n if (entry.unique_id < firstNotificationIdArg) {\n // alarm is not current\n return\n }\n if (entry.old_status === \"UNINITIALIZED\" || entry.old_status === \"UNDEFINED\") {\n // alarm switch to CLEAR from old_status\n return\n }\n if (entry.no_clear_notification) {\n // alarm is CLEAR but has no_clear_notification flag\n return\n }\n title = `${name} back to normal (${valueString})`\n icon = \"images/check-mark-2-128-green.png\"\n interaction = false\n break\n\n case \"WARNING\":\n if (entry.old_status === \"CRITICAL\") {\n status = `demoted to ${entry.status.toLowerCase()}`\n }\n\n icon = \"images/alert-128-orange.png\"\n interaction = false\n break\n\n case \"CRITICAL\":\n if (entry.old_status === \"WARNING\") {\n status = `escalated to ${entry.status.toLowerCase()}`\n }\n\n icon = \"images/alert-128-red.png\"\n interaction = true\n break\n\n default:\n console.warn(`invalid alarm status ${entry.status}`) // eslint-disable-line no-console\n return\n }\n\n // filter recipients\n // if (show) {\n // show = NETDATA.alarms.recipientMatches(entry.recipient, NETDATA.alarms.recipients)\n // }\n\n\n if (show) {\n if (typeof notificationCallback === \"function\") {\n show = notificationCallback(entry)\n }\n\n if (show) {\n // show this notification\n // eslint-disable-next-line consistent-return\n return {\n notificationTitle: title,\n notificationOptions: {\n body: `${entry.hostname} - ${entry.chart} (${entry.family}) - ${status}: ${entry.info}`,\n tag: `${tag}`,\n requireInteraction: interaction,\n icon: serverStatic + icon,\n data: entry,\n },\n notificationHandler: (event: Event) => {\n event.preventDefault()\n if (event.target) {\n const { data } = event.target as Notification\n scrollToAlarm(data)\n }\n },\n }\n }\n }\n}\n\nfunction* notifyAll(serverDefault: string, activeAlarms: ActiveAlarms) {\n const alarmLogs: AlarmLogs = yield call(getLog, lastNotificationId, serverDefault)\n if (alarmLogs === null || typeof alarmLogs !== \"object\") {\n console.warn(\"invalid alarms log response\") // eslint-disable-line no-console\n return\n }\n\n if (alarmLogs.length === 0) {\n console.log(\"received empty alarm log\") // eslint-disable-line no-console\n return\n }\n\n const logsSorted = sortBy(prop(\"unique_id\"), alarmLogs)\n\n // eslint-disable-next-line camelcase\n const newLogs = logsSorted.filter(({ unique_id }) => unique_id > lastNotificationId)\n const notifications = newLogs\n .map((entry) => (getNotification(entry, activeAlarms, firstNotificationId)))\n .filter((x) => x !== undefined) as NotificationConfig[]\n\n for (let i = 0; i < notifications.length; i += 1) {\n const {\n notificationTitle, notificationOptions, notificationHandler,\n } = notifications[i]\n const notification = new Notification(\n notificationTitle,\n notificationOptions,\n )\n notification.onclick = notificationHandler\n\n yield delay(ALARMS_MS_BETWEEN_NOTIFICATIONS)\n }\n\n // todo put to redux store\n lastNotificationId = (last(logsSorted) as AlarmLog).unique_id\n\n if (typeof window.netdataAlarmsRemember === \"undefined\" || window.netdataAlarmsRemember) {\n localStorage.setItem(\"last_notification_id\", `${lastNotificationId}`)\n }\n}\n\n\nfunction* get(what: string, serverDefault: string) {\n const { data } = yield call(axiosInstance.get, `${serverDefault}/api/v1/alarms?${what}`)\n if (firstNotificationId === 0 && typeof data.latest_alarm_log_unique_id === \"number\") {\n firstNotificationId = data.latest_alarm_log_unique_id\n }\n return data\n}\n\nfunction* alarmsLoop(serverDefault: string) {\n while (true) {\n const activeAlarms = (yield call(get, \"active\", serverDefault)) as ActiveAlarms\n if (activeAlarms) {\n yield put(updateActiveAlarmsAction({ activeAlarms }))\n if (\n hasGivenNotificationPermissions()\n // timestamps in seconds\n && (activeAlarms.latest_alarm_log_unique_id > lastNotificationId)\n ) {\n yield call(notifyAll, serverDefault, activeAlarms)\n\n if (activeAlarms.status === false) {\n // Health monitoring is disabled on this netdata\n break\n }\n }\n }\n yield delay(ALARMS_UPDATE_EVERY)\n }\n}\n\nfunction* startAlarms() {\n // make sure we handle that action only once, we don't want multiple intervals/loops\n const { payload }: { payload: StartAlarmsPayload } = yield take(startAlarmsAction)\n const { serverDefault } = payload\n\n yield delay(ALARMS_INITIALIZATION_DELAY)\n\n lastNotificationId = +(localStorage.getItem(\"last_notification_id\") || lastNotificationId)\n requestPermissions()\n yield call(alarmsLoop, serverDefault)\n}\n\ntype FetchAllAlarmsPayload = {\n callback: (x: unknown) => void,\n serverDefault: string,\n}\nfunction* fetchAllAlarmsSaga({ payload }: Action<FetchAllAlarmsPayload>) {\n const { callback, serverDefault } = payload\n const allAlarms = yield call(get, \"all\", serverDefault)\n callback(allAlarms)\n}\n\nexport function* alarmsSagas() {\n yield spawn(startAlarms)\n yield takeEvery(fetchAllAlarmsAction.request, fetchAllAlarmsSaga)\n}\n","const allowedReferrerDomains = [\n \"\",\n \"https://www.google.com/\",\n \"https://duckduckgo.com/\",\n \"https://www.reddit.com/\",\n]\n\nexport const isAllowedReferrer = (referrer: string) => allowedReferrerDomains.includes(referrer)\n || referrer.endsWith(\".my-netdata.io/\")\n || referrer.startsWith(\"https://github.com/\")\n || referrer.endsWith(\"netdata.cloud/\")\n || referrer.startsWith(\"https://app.netdata.cloud/\")\n","import { uniq, filter } from \"ramda\"\nimport {\n spawn, take, put, takeEvery, call, delay, select,\n} from \"redux-saga/effects\"\nimport { channel } from \"redux-saga\"\nimport { AxiosResponse } from \"axios\"\nimport { Action } from \"redux-act\"\n\nimport { NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport { axiosInstance } from \"utils/api\"\nimport { isDemo } from \"utils/is-demo\"\nimport { sidePanelTransitionTimeInSeconds } from \"components/space-panel/settings\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\n\nimport {\n fetchHelloAction,\n FetchHelloPayload,\n windowFocusChangeAction,\n updatePersonUrlsAction,\n SetOptionAction,\n setOptionAction,\n setSpacePanelStatusAction,\n SetSpacePanelStatusActionPayload,\n setSpacePanelTransitionEndAction,\n HelloResponse,\n accessRegistrySuccessAction,\n} from \"./actions\"\nimport { alarmsSagas } from \"./alarms-sagas\"\nimport { MASKED_DATA } from \"./constants\"\nimport { selectFullInfoPayload } from \"./selectors\"\nimport { isAllowedReferrer } from \"./utils\"\nimport { InfoPayload } from \"./__mocks__/info-mock\"\n\nconst windowFocusChannel = channel()\n\nexport function listenToWindowFocus() {\n window.addEventListener(\"focus\", () => {\n windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: true }))\n })\n window.addEventListener(\"blur\", () => {\n windowFocusChannel.put(windowFocusChangeAction({ hasWindowFocus: false }))\n })\n}\n\nexport function* watchWindowFocusChannel() {\n while (true) {\n const action = yield take(windowFocusChannel)\n yield put(action)\n }\n}\n\nfunction* waitForFullInfoPayload() {\n return (yield take(fetchInfoAction.success)).payload.fullInfoPayload\n}\n\nfunction* injectPosthog(machineGuid: string, personGuid?: string) {\n if (window.posthog) {\n return\n }\n const info: InfoPayload = (yield select(selectFullInfoPayload))\n || (yield call(waitForFullInfoPayload))\n || {}\n\n /* eslint-disable */\n // @ts-ignore\n !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(\".\");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement(\"script\")).type=\"text/javascript\",p.async=!0,p.src=s.api_host+\"/static/array.js\",(r=t.getElementsByTagName(\"script\")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a=\"posthog\",u.people=u.people||[],u.toString=function(t){var e=\"posthog\";return\"posthog\"!==a&&(e+=\".\"+a),t||(e+=\" (stub)\"),e},u.people.toString=function(){return u.toString(1)+\".people (stub)\"},o=\"capture identify alias people.set people.set_once set_config register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags\".split(\" \"),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);\n /* eslint-enable */\n window.posthog.init(\"mqkwGT0JNFqO-zX2t0mW6Tec9yooaVu7xCBlXtHnt5Y\", {\n api_host: \"https://posthog.netdata.cloud\",\n loaded: (posthog: any) => {\n if (personGuid) {\n posthog.identify(personGuid)\n }\n },\n })\n const shouldMaskReferrer = !isDemo && !isAllowedReferrer(document.referrer)\n const MASKED = \"masked\"\n window.posthog.register(\n // remove properties with unavailable values\n filter((value) => value !== undefined && value !== null,\n {\n $ip: \"127.0.0.1\",\n $current_url: isDemo ? null : \"agent dashboard\",\n $pathname: isDemo ? null : \"netdata-dashboard\",\n $host: isDemo ? null : \"dashboard.netdata.io\",\n\n $initial_referring_domain: shouldMaskReferrer ? MASKED : null,\n $initial_referrer: shouldMaskReferrer ? MASKED : null,\n $referring_domain: shouldMaskReferrer ? MASKED : null,\n $referrer: shouldMaskReferrer ? MASKED : null,\n\n event_source: \"agent dashboard\",\n\n netdata_version: info.version,\n netdata_machine_guid: machineGuid,\n netdata_person_id: personGuid || \"Unavailable\",\n netdata_buildinfo: info[\"buildinfo\"],\n netdata_release_channel: info[\"release-channel\"],\n mirrored_host_count: info.mirrored_hosts?.length,\n alarms_normal: info.alarms?.normal,\n alarms_warning: info.alarms?.warning,\n alarms_critical: info.alarms.critical,\n host_os_name: info.os_name,\n host_os_id: info.os_id,\n host_os_id_like: info.os_id_like,\n host_os_version: info.os_version,\n host_os_version_id: info.os_version_id,\n host_os_detection: info.os_detection,\n system_cores_total: info.cores_total,\n system_total_disk_space: info.total_disk_space,\n system_cpu_freq: info.cpu_freq,\n system_ram_total: info.ram_total,\n system_kernel_name: info.kernel_name,\n system_kernel_version: info.kernel_version,\n system_architecture: info.architecture,\n system_virtualization: info.virtualization,\n system_virt_detection: info.virt_detection,\n system_container: info.container,\n system_container_detection: info.container_detection,\n container_os_name: info.container_os_name,\n container_os_id: info.container_os_id,\n container_os_id_like: info.container_os_id_like,\n container_os_version: info.container_os_version,\n container_os_version_id: info.container_os_version_id,\n host_collectors_count: info.collectors.length,\n host_cloud_enabled: info[\"cloud-enabled\"],\n host_cloud_available: info[\"cloud-available\"],\n host_agent_claimed: info[\"agent-claimed\"],\n host_aclk_available: info[\"aclk-available\"],\n host_aclk_implementation: info[\"aclk-implementation\"],\n host_allmetrics_json_used: info[\"allmetrics-json-used\"],\n host_allmetrics_prometheus_used: info[\"allmetrics-prometheus-used\"],\n host_allmetrics_shell_used: info[\"allmetrics-shell-used\"],\n host_charts_count: info[\"charts-count\"],\n host_dashboard_used: info[\"dashboard-used\"],\n host_metrics_count: info[\"metrics-count\"],\n host_notification_methods: info[\"notification-methods\"],\n config_memory_mode: info[\"memory-mode\"],\n config_exporting_enabled: info[\"exporting-enabled\"],\n config_exporting_connectors: info[\"exporting-connectors\"],\n config_hosts_available: info[\"hosts-available\"],\n config_https_enabled: info[\"https-enabled\"],\n config_multidb_disk_quota: info[\"multidb-disk-quota\"],\n config_page_cache_size: info[\"page-cache-size\"],\n config_stream_enabled: info[\"stream-enabled\"],\n config_web_enabled: info[\"web-enabled\"],\n // eslint-disable-next-line camelcase\n host_is_parent: info.host_labels?._is_parent,\n mirrored_hosts_reachable: info.mirrored_hosts_status\n .filter(({ reachable }) => reachable).length,\n mirrored_hosts_unreachable: info.mirrored_hosts_status\n .filter(({ reachable }) => !reachable).length,\n host_collectors: info.collectors,\n host_is_k8s_node: info.is_k8s_node,\n }),\n )\n}\n\nexport type PersonUrl = [\n string, // guid\n string, // url\n number, // last timestamp (ms)\n number, // accesses\n string // name\n]\n\ntype AccessRegistryResponse = null | {\n personGuid?: string\n registryServer: string\n urls?: PersonUrl[]\n}\n\ntype AccessRegistry = (args: {\n machineGuid: string\n maxRedirects: number\n name: string\n registryServer: string\n url: string\n}) => Promise<AccessRegistryResponse>\nconst accessRegistry: AccessRegistry = ({\n machineGuid, maxRedirects, name, registryServer, url,\n}) => axiosInstance.get(`${registryServer}/api/v1/registry`, {\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n params: {\n action: \"access\",\n machine: machineGuid,\n name,\n url,\n },\n withCredentials: true, // required for the cookie\n}).then(({ data }) => {\n // todo xss check\n const isRedirect = typeof data.registry === \"string\"\n\n let returnData = data\n if (typeof data.status !== \"string\" || data.status !== \"ok\") {\n // todo throw error (409 in old dashboard)\n returnData = null\n }\n\n if (returnData === null) {\n if (isRedirect && maxRedirects > 0) {\n return accessRegistry({\n maxRedirects: maxRedirects - 1,\n machineGuid,\n name,\n registryServer: data.registry,\n url,\n })\n }\n return { registryServer }\n }\n const urls = data.urls.filter((u: [string, string]) => u[1] !== MASKED_DATA)\n return {\n personGuid: data.person_guid || null,\n registryServer,\n urls,\n }\n}).catch(() => {\n // todo handle error in better way (410 in old dashboard)\n console.warn(\"error calling registry:\", registryServer) // eslint-disable-line no-console\n return null\n})\n\nexport interface RegistryMachine {\n guid: string\n url: string\n lastTimestamp: number\n accesses: number\n name: string\n alternateUrls: string[]\n}\n\ntype ParsePersonUrls = (\n personUrls: PersonUrl[]\n) => {\n registryMachines: { [key: string]: RegistryMachine }\n registryMachinesArray: RegistryMachine[]\n}\nexport const parsePersonUrls: ParsePersonUrls = (personUrls) => {\n // todo main.js is using registryMachines, but should use only the array\n const registryMachines: { [key: string]: RegistryMachine } = {}\n\n personUrls\n .slice()\n .reverse()\n .forEach(([guid, url, lastTimestamp, accesses, name]: PersonUrl) => {\n const existingObj = registryMachines[guid] || {\n lastTimestamp: 0,\n accesses: 0,\n alternateUrls: [],\n guid: \"\",\n url: \"\",\n name: \"\"\n }\n const isNewer = existingObj.lastTimestamp < lastTimestamp\n const extended: RegistryMachine = {\n guid: existingObj.guid || guid,\n url: isNewer ? url : existingObj.url,\n lastTimestamp: isNewer ? lastTimestamp : existingObj.lastTimestamp,\n accesses: existingObj.accesses + accesses,\n name: isNewer ? name : existingObj.name,\n alternateUrls: existingObj.alternateUrls.concat(url),\n }\n registryMachines[guid] = extended\n })\n\n const registryMachinesArray = uniq(\n // not sure if reverse is needed, but it was in old dashboard\n personUrls\n .slice()\n .reverse()\n .map(([guid]: PersonUrl) => guid),\n ).map((guid) => registryMachines[guid])\n return {\n registryMachines,\n registryMachinesArray,\n }\n}\n\nfunction* fetchHelloSaga({ payload }: Action<FetchHelloPayload>) {\n const { serverDefault } = payload\n const helloCallUrl = `${serverDefault}api/v1/registry?action=hello`\n let response: AxiosResponse<HelloResponse>\n try {\n response = yield call(axiosInstance.get, helloCallUrl, {\n headers: {\n \"Cache-Control\": \"no-cache, no-store\",\n Pragma: \"no-cache\",\n },\n withCredentials: true,\n })\n } catch (error) {\n console.warn(\"error accessing registry or Do-Not-Track is enabled\") // eslint-disable-line\n yield put(fetchHelloAction.failure())\n return\n }\n const cloudBaseURL = response.data.cloud_base_url\n const { hostname } = response.data\n const machineGuid = response.data.machine_guid\n const registryServer = response.data.registry\n const isUsingGlobalRegistry = registryServer === NETDATA_REGISTRY_SERVER\n\n yield put(fetchHelloAction.success({\n cloudBaseURL,\n hostname,\n isUsingGlobalRegistry,\n machineGuid,\n }))\n\n const name = isUsingGlobalRegistry ? MASKED_DATA : hostname\n const url = isUsingGlobalRegistry ? MASKED_DATA : serverDefault\n\n // now make access call - max_redirects, callback, etc...\n const accessRegistryResponse: AccessRegistryResponse = yield call(accessRegistry, {\n machineGuid,\n maxRedirects: 2,\n name,\n registryServer,\n url,\n })\n\n if (response.data.anonymous_statistics) {\n yield spawn(injectPosthog, response.data.machine_guid, accessRegistryResponse?.personGuid)\n }\n\n if (accessRegistryResponse?.urls && accessRegistryResponse?.personGuid) {\n const personUrls = parsePersonUrls(accessRegistryResponse.urls)\n const { registryMachines, registryMachinesArray } = personUrls\n yield put(updatePersonUrlsAction({\n personGuid: accessRegistryResponse.personGuid,\n registryMachines,\n registryMachinesArray,\n }))\n }\n\n yield put(accessRegistrySuccessAction({\n registryServer: accessRegistryResponse?.registryServer || registryServer,\n }))\n}\n\nconst constructOptionStorageKey = (key: string) => `options.${key}`\nfunction setOptonSaga({ payload }: Action<SetOptionAction>) {\n const { key, value } = payload\n if (key === \"stop_updates_when_focus_is_lost\") {\n // old dashboard was saving that property to localStorage, but was always ommiting it when\n // reading. it was only possible to persist this setting via url (update_always hash param)\n return\n }\n localStorage.setItem(constructOptionStorageKey(key), JSON.stringify(value))\n}\n\nfunction* spacePanelSaga({ payload }: Action<SetSpacePanelStatusActionPayload>) {\n if (payload.isActive) {\n document.body.className = \"with-panel\"\n } else {\n document.body.className = \"\"\n }\n yield delay(sidePanelTransitionTimeInSeconds * 1000)\n yield put(setSpacePanelTransitionEndAction({ isActive: payload.isActive }))\n}\n\nexport function* globalSagas() {\n yield spawn(listenToWindowFocus)\n yield spawn(watchWindowFocusChannel)\n yield takeEvery(fetchHelloAction.request, fetchHelloSaga)\n yield spawn(alarmsSagas)\n yield takeEvery(setOptionAction, setOptonSaga)\n yield takeEvery(setSpacePanelStatusAction, spacePanelSaga)\n}\n","/* eslint-disable comma-dangle */\n/* eslint-disable implicit-arrow-linebreak */\nimport { omit, pipe, mergeDeepLeft } from \"ramda\"\n\ntype HashParams = { [param: string]: string }\nconst fragmentParamsSeparatorRegEx = /[&;]/\nconst fragmentParamsSeparator = \";\"\n\nexport const getHashParams = (\n hash = decodeURIComponent(window.location.hash.substr(1))\n): HashParams => {\n if (hash.length === 0) {\n return {}\n }\n const params = hash.split(fragmentParamsSeparatorRegEx)\n const response = params.reduce((acc: HashParams, current) => {\n const parts = current.split(\"=\")\n const [param, value] = parts\n acc[param] = value\n return acc\n }, {})\n return response\n}\n\nexport const makeHashFromObject = (params: { [paramKey: string]: string }) => {\n const entries = Object.entries(params)\n if (entries.length === 0) {\n return \"\"\n }\n return entries.map(\n ([key, value]) => `${key}=${encodeURIComponent(value)}`\n ).join(fragmentParamsSeparator)\n}\n\nexport const getFilteredHash = (\n excludedParams: string[],\n hash = decodeURIComponent(window.location.hash.substr(1))\n) => {\n const filteredParams = omit(excludedParams, getHashParams(hash))\n return makeHashFromObject(filteredParams)\n}\n\nexport const getUniqueParamsHash = pipe(getHashParams, makeHashFromObject)\n\nexport const setHashParams = (params: { [paramKey: string]: string }) => {\n const allParams = getHashParams()\n const allParamsResult = mergeDeepLeft(params, allParams)\n // window.history.replaceState(null, \"\", `#${makeHashFromObject(allParams)}`)\n window.location.hash = `${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.location.hash = `${getFilteredHash(params)}`\n}\n","/* eslint-disable camelcase */\n/* eslint-disable operator-linebreak */\nimport { take, takeEvery } from \"redux-saga/effects\"\nimport { Action } from \"redux-act\"\n\nimport {\n clearHighlightAction,\n SetGlobalChartUnderlayAction,\n setGlobalChartUnderlayAction,\n} from \"domains/global/actions\"\nimport {\n explicitlySignInAction,\n showSignInModalAction,\n ShowSignInModalAction,\n} from \"domains/dashboard/actions\"\nimport { setHashParams, getHashParams, removeHashParams } from \"utils/hash-utils\"\n\nexport const LOCAL_STORAGE_NEEDS_SYNC = \"LOCAL-STORAGE-NEEDS-SYNC\"\n\nfunction setGlobalChartUnderlaySaga({ payload }: Action<SetGlobalChartUnderlayAction>) {\n const { after, before } = payload\n if (window.urlOptions) {\n // additional check to prevent loop, after setting initial state from url\n if (window.urlOptions.after !== after || window.urlOptions.before !== before) {\n window.urlOptions.netdataHighlightCallback(true, after, before)\n }\n } else {\n // TODO: Consider a setting to control wether the component sets these hash params\n const hashParams = getHashParams()\n const highlight_after = Math.round(after).toString()\n const highlight_before = Math.round(before).toString()\n if (\n hashParams.highlight_after !== highlight_after ||\n hashParams.highlight_before !== highlight_before\n ) {\n setHashParams({ highlight_after, highlight_before })\n }\n }\n}\n\nfunction clearHighlightSaga() {\n if (window.urlOptions) {\n window.urlOptions.netdataHighlightCallback(false, 0, 0)\n } else {\n removeHashParams([\"highlight_after\", \"highlight_before\"])\n }\n}\n\nfunction* showSignInSaga({ payload }: Action<ShowSignInModalAction>) {\n if (window.showSignInModal) {\n window.showSignInModal()\n\n yield take(explicitlySignInAction)\n const { signInLinkHref } = payload\n window.localStorage.setItem(LOCAL_STORAGE_NEEDS_SYNC, \"true\")\n window.location.href = signInLinkHref\n }\n}\n\nexport function* mainJsSagas() {\n yield takeEvery(setGlobalChartUnderlayAction, setGlobalChartUnderlaySaga)\n yield takeEvery(clearHighlightAction, clearHighlightSaga)\n yield takeEvery(showSignInModalAction, showSignInSaga)\n}\n","import { spawn } from \"redux-saga/effects\"\n\nimport { chartSagas } from \"domains/chart/sagas\"\nimport { globalSagas } from \"domains/global/sagas\"\nimport { mainJsSagas } from \"domains/dashboard/sagas\"\n\nexport function* rootSaga() {\n yield spawn(globalSagas)\n yield spawn(chartSagas)\n yield spawn(mainJsSagas)\n}\n","import { compose, applyMiddleware, createStore } from \"redux\"\nimport createSagaMiddleware from \"redux-saga\"\nimport rootReducer from \"./root-reducer\"\nimport { rootSaga } from \"./root-saga\"\n\nconst sagaMiddleware = createSagaMiddleware()\n\nconst reduxDevTools = process.env.NODE_ENV === \"development\"\n && window.__REDUX_DEVTOOLS_EXTENSION__\n // @ts-ignore\n && window.__REDUX_DEVTOOLS_EXTENSION__({ name: \"Dashboard Charts\" })\n\nconst composeMiddlewaresWithDevTools = () => (reduxDevTools\n ? compose(applyMiddleware(sagaMiddleware), reduxDevTools)\n : compose(applyMiddleware(sagaMiddleware)))\n\nexport const configureStore = () => {\n const store = createStore(\n rootReducer,\n composeMiddlewaresWithDevTools(),\n )\n sagaMiddleware.run(rootSaga)\n return store\n}\n\nexport const store = configureStore()\n","import $ from \"jquery\"\n\nwindow.$ = $\nwindow.jQuery = $\n","let loadCssPromise: Promise<void>\n\ntype LoadCss = (href: string) => Promise<void>\nexport const loadCss: LoadCss = (href) => {\n if (loadCssPromise) {\n return loadCssPromise\n }\n return new Promise((resolve, reject) => {\n const fileRef = document.createElement(\"link\")\n fileRef.setAttribute(\"rel\", \"stylesheet\")\n fileRef.setAttribute(\"type\", \"text/css\")\n fileRef.setAttribute(\"href\", href)\n\n fileRef.onload = () => {\n resolve()\n }\n\n fileRef.onerror = () => {\n reject(Error(`Error loading css: ${href}`))\n }\n\n document.getElementsByTagName(\"head\")[0].appendChild(fileRef)\n })\n}\n","import classNames from \"classnames\"\nimport { Attributes } from \"./transformDataAttributes\"\n\nexport type ChartLibraryName =\n | \"dygraph\"\n | \"sparkline\"\n | \"peity\"\n | \"google\"\n // | \"d3\"\n | \"d3pie\"\n | \"easypiechart\"\n | \"gauge\"\n | \"textonly\"\n | \"groupbox\"\nexport interface ChartLibraryConfig {\n aspectRatio?: number\n format: string\n hasLegend: (attributes: Attributes) => boolean\n hasToolboxPanAndZoom?: boolean\n isLogScale?: (attributes: Attributes) => boolean\n options: (attributes: Attributes) => string\n trackColors: boolean\n pixelsPerPoint: (attributes: Attributes) => number\n xssRegexIgnore: RegExp\n containerClass: (attributes: Attributes) => string\n}\nexport type ChartLibrariesSettings = {\n [key in ChartLibraryName]: ChartLibraryConfig\n}\n\ntype IsDygraphSparkline = (attributes: Attributes) => boolean\nconst isDygraphSparkline: IsDygraphSparkline = (attributes) => (\n attributes.dygraphTheme === \"sparkline\"\n)\n\nexport const chartLibrariesSettings: ChartLibrariesSettings = {\n dygraph: {\n // initialize: window.NETDATA.dygraphInitialize,\n // create: window.NETDATA.dygraphChartCreate,\n // update: window.NETDATA.dygraphChartUpdate,\n // resize(state) {\n // if (typeof state.tmp.dygraph_instance !== \"undefined\"\n // && typeof state.tmp.dygraph_instance.resize === \"function\") {\n // state.tmp.dygraph_instance.resize()\n // }\n // },\n // setSelection: window.NETDATA.dygraphSetSelection,\n // clearSelection: window.NETDATA.dygraphClearSelection,\n hasToolboxPanAndZoom: true,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n format: \"json\",\n options(attributes: Attributes) {\n if (typeof this.isLogScale === \"function\") {\n // flip - in proper order (from oldest to newest)\n return `ms|flip${this.isLogScale(attributes) ? \"|abs\" : \"\"}`\n }\n return \"\"\n },\n hasLegend(attributes: Attributes) {\n // not using __hasLegendCache__ as in old-dashboard, because performance tweaks like this\n // probably won't be needed in react app\n const { legend = true } = attributes\n return !isDygraphSparkline(attributes) && Boolean(legend)\n },\n // autoresize(state) {\n // void (state)\n // return true\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: ((attributes: Attributes) => (isDygraphSparkline(attributes) ? 2 : 3)),\n // pixels_per_point(state) {\n // return (this.isSparkline(state) === false) ? 3 : 2\n // },\n isLogScale(attributes: Attributes) {\n return attributes.dygraphTheme === \"logscale\"\n },\n containerClass(attributes: Attributes) {\n return this.hasLegend(attributes)\n ? classNames(\n \"netdata-container-with-legend\",\n attributes.legendPosition === \"bottom\" && \"netdata-container-with-legend--bottom\",\n )\n : \"netdata-container\"\n },\n // container_class(state) {\n // if (this.legend(state) !== null) {\n // return \"netdata-container-with-legend\"\n // }\n // return \"netdata-container\"\n // },\n },\n sparkline: {\n // initialize: window.NETDATA.sparklineInitialize,\n // create: window.NETDATA.sparklineChartCreate,\n // update: window.NETDATA.sparklineChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options: () => \"flip|abs\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 3,\n containerClass: () => \"netdata-container\",\n },\n peity: {\n // initialize: window.NETDATA.peityInitialize,\n // create: window.NETDATA.peityChartCreate,\n // update: window.NETDATA.peityChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"ssvcomma\",\n options: () => \"null2zero|flip|abs\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 3,\n containerClass: () => \"netdata-container\",\n },\n google: {\n // initialize: window.NETDATA.googleInitialize,\n // create: window.NETDATA.googleChartCreate,\n // update: window.NETDATA.googleChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.rows$\"),\n format: \"datatable\",\n options: () => \"\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 300\n // },\n trackColors: false,\n pixelsPerPoint: () => 4,\n containerClass: () => \"netdata-container\",\n },\n d3pie: {\n // initialize: window.NETDATA.d3pieInitialize,\n // create: window.NETDATA.d3pieChartCreate,\n // update: window.NETDATA.d3pieChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.d3pieSetSelection,\n // clearSelection: window.NETDATA.d3pieClearSelection,\n hasToolboxPanAndZoom: false,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result.data$\"),\n format: \"json\",\n hasLegend: () => false,\n options: () => \"objectrows|ms\",\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: false,\n pixelsPerPoint: () => 15,\n containerClass: () => \"netdata-container\",\n },\n // d3: {\n // initialize: window.NETDATA.d3Initialize,\n // create: window.NETDATA.d3ChartCreate,\n // update: window.NETDATA.d3ChartUpdate,\n // resize: null,\n // setSelection: undefined, // function(state, t) { void(state); return true; },\n // clearSelection: undefined, // function(state) { void(state); return true; },\n // toolboxPanAndZoom: null,\n // initialized: false,\n // enabled: true,\n // xssRegexIgnore: new RegExp(\"^/api/v1/data\\.result.data$\"),\n // format(state) {\n // void (state)\n // return \"json\"\n // },\n // options(state) {\n // void (state)\n // return \"\"\n // },\n // legend(state) {\n // void (state)\n // return null\n // },\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n // track_colors(state) {\n // void (state)\n // return false\n // },\n // pixels_per_point(state) {\n // void (state)\n // return 3\n // },\n // container_class(state) {\n // void (state)\n // return \"netdata-container\"\n // },\n // },\n easypiechart: {\n // initialize: window.NETDATA.easypiechartInitialize,\n // create: window.NETDATA.easypiechartChartCreate,\n // update: window.NETDATA.easypiechartChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.easypiechartSetSelection,\n // clearSelection: window.NETDATA.easypiechartClearSelection,\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options() {\n return \"absolute\"\n },\n hasLegend() {\n return false\n },\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: () => 3,\n aspectRatio: 100,\n containerClass: () => \"netdata-container-easypiechart\",\n },\n gauge: {\n // initialize: window.NETDATA.gaugeInitialize,\n // create: window.NETDATA.gaugeChartCreate,\n // update: window.NETDATA.gaugeChartUpdate,\n // resize: null,\n // setSelection: window.NETDATA.gaugeSetSelection,\n // clearSelection: window.NETDATA.gaugeClearSelection,\n hasToolboxPanAndZoom: false,\n // initialized: false,\n // enabled: true,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n format: \"array\",\n options: () => \"absolute\",\n hasLegend: () => false,\n // autoresize(state) {\n // void (state)\n // return false\n // },\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n trackColors: true,\n pixelsPerPoint: () => 3,\n aspectRatio: 60,\n containerClass: () => \"netdata-container-gauge\",\n },\n textonly: {\n // autoresize(state) {\n // void (state)\n // return false\n // },\n containerClass: () => \"netdata-container\",\n // create: window.NETDATA.textOnlyCreate,\n // enabled: true,\n format: \"array\",\n // initialized: true,\n // initialize(callback) {\n // callback()\n // },\n hasLegend: () => false,\n // max_updates_to_recreate(state) {\n // void (state)\n // return 5000\n // },\n options: () => \"absolute\",\n pixelsPerPoint: () => 3,\n trackColors: false,\n // update: window.NETDATA.textOnlyUpdate,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n },\n groupbox: {\n containerClass: () => \"netdata-container\",\n hasLegend: () => false,\n options: () => \"absolute\",\n format: \"json\",\n trackColors: false,\n pixelsPerPoint: () => 3,\n xssRegexIgnore: new RegExp(\"^/api/v1/data.result$\"),\n },\n}\n","import { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\n\nexport const getChartURLOptions = (\n attributes: Attributes, shouldEliminateZeroDimensions: boolean,\n) => {\n const {\n appendOptions,\n overrideOptions,\n } = attributes\n let ret = \"\"\n\n ret += overrideOptions\n ? overrideOptions.toString()\n : chartLibrariesSettings[attributes.chartLibrary].options(attributes)\n\n if (typeof appendOptions === \"string\") {\n ret += `|${encodeURIComponent(appendOptions)}`\n }\n\n ret += \"|jsonwrap\"\n\n if (shouldEliminateZeroDimensions) {\n ret += \"|nonzero\"\n }\n\n if (attributes.dimensionsAggrMethod === \"sum-of-abs\"\n || (!attributes.dimensionsAggrMethod && attributes.groupBy && attributes.groupBy !== \"dimension\")\n ) {\n ret += \"|absolute\"\n }\n\n return ret\n}\n","export const BIGGEST_INTERVAL_NUMBER = 2 ** 31 - 1\n","import React from \"react\"\n\nimport { Icon } from \"components/icon\"\n\ninterface Props {\n containerNode: HTMLElement\n hasEmptyData: boolean\n}\n\nexport const Loader = ({\n containerNode,\n hasEmptyData,\n}: Props) => {\n // below is 90% of original logic.\n // since it rerenders when IntersectionObserver turns the chart back on,\n // it's not that important to detect screen height and container sizes changes\n const screenHeight = window.screen.height\n\n // normally we want a font size, as tall as the element\n let h = containerNode.clientHeight\n\n // but give it some air, 20% let's say, or 5 pixels min\n const lost = Math.max(h * 0.2, 5)\n h -= lost\n\n // center the text, vertically\n let paddingTop = (lost - 5) / 2\n\n // but check the width too\n // it should fit 10 characters in it\n const w = containerNode.clientWidth / 10\n if (h > w) {\n paddingTop += (h - w) / 2\n h = w\n }\n\n // and don't make it too huge\n // 5% of the screen size is good\n if (h > screenHeight / 20) {\n paddingTop += (h - (screenHeight / 20)) / 2\n h = screenHeight / 20\n }\n\n const label = hasEmptyData ? \" empty\" : \" netdata\"\n const iconType = hasEmptyData ? \"noData\" : \"loading\"\n\n return (\n <div\n className=\"netdata-message icon\"\n style={{\n fontSize: h,\n paddingTop,\n }}\n >\n <Icon iconType={iconType} />\n {label}\n </div>\n )\n}\n","type GetPanAndZoomStep = (event: React.MouseEvent) => number\nexport const getPanAndZoomStep: GetPanAndZoomStep = (event) => {\n if (event.ctrlKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_control\n } if (event.shiftKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_shift\n } if (event.altKey) {\n return window.NETDATA.options.current.pan_and_zoom_factor\n * window.NETDATA.options.current.pan_and_zoom_factor_multiplier_alt\n }\n return window.NETDATA.options.current.pan_and_zoom_factor\n}\n","export const safeEqualCheck = (a: unknown, b: unknown) => {\n if (a === b) {\n return true\n }\n return Number.isNaN(a as number) && Number.isNaN(b as number)\n}\n","import { identity } from \"ramda\"\nimport {\n useCallback, useState, useMemo, useRef,\n} from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTemperatureSetting, selectSecondsAsTimeSetting } from \"domains/global/selectors\"\nimport { unitsConversionCreator } from \"utils/units-conversion\"\nimport { safeEqualCheck } from \"utils/safe-equal-check\"\n\nimport { ChartData } from \"../chart-types\"\nimport { Attributes } from \"./transformDataAttributes\"\n\ntype Converter = (v: number) => number | string\n// only time units are converted into strings, the rest are numbers\n\n// todo - memoization similar to the one as in old dashboard, but probably not needed\nconst formattersFixed: any[] = []\nconst formattersZeroBased: any[] = []\nconst fastNumberFormat = (min: number, max: number) => {\n const key = max\n if (min === max) {\n if (typeof formattersFixed[key] === \"undefined\") {\n formattersFixed[key] = new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n }\n\n return formattersFixed[key]\n } if (min === 0) {\n if (typeof formattersZeroBased[key] === \"undefined\") {\n formattersZeroBased[key] = new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n }\n\n return formattersZeroBased[key]\n }\n // (old dashboard comment)\n // this is never used\n // it is added just for completeness\n return new Intl.NumberFormat(undefined, {\n useGrouping: true,\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n })\n}\n\nconst getLegendFormatValue = (\n convertUnits: Converter, intlNumberFormat: Intl.NumberFormat | null, valueDecimalDetail: number,\n) => (value: number | string | null) => {\n if (typeof value !== \"number\") {\n return \"-\"\n }\n\n const convertedValue = convertUnits(value)\n if (typeof convertedValue !== \"number\") {\n return convertedValue\n }\n\n if (intlNumberFormat !== null) {\n return intlNumberFormat.format(convertedValue)\n }\n\n let dmin\n let dmax\n if (valueDecimalDetail !== -1) {\n dmin = valueDecimalDetail\n dmax = valueDecimalDetail\n } else {\n dmin = 0\n const abs = (convertedValue < 0) ? -convertedValue : convertedValue\n if (abs > 1000) {\n dmax = 0\n } else if (abs > 10) {\n dmax = 1\n } else if (abs > 1) {\n dmax = 2\n } else if (abs > 0.1) {\n dmax = 2\n } else if (abs > 0.01) {\n dmax = 4\n } else if (abs > 0.001) {\n dmax = 5\n } else if (abs > 0.0001) {\n dmax = 6\n } else {\n dmax = 7\n }\n }\n\n return fastNumberFormat(dmin, dmax).format(convertedValue)\n}\n\ntype LegendFormatValue = (value: string | number | null) => string | number\n\ninterface Arguments {\n attributes: Attributes,\n data: ChartData,\n units: string,\n unitsCommon: string | undefined,\n unitsDesired: string,\n uuid: string,\n}\nexport const useFormatters = ({\n attributes,\n data,\n units,\n unitsCommon,\n unitsDesired,\n uuid,\n}: Arguments) => {\n const temperatureSetting = useSelector(selectTemperatureSetting)\n const secondsAsTimeSetting = useSelector(selectSecondsAsTimeSetting)\n\n // previously _unitsConversion\n const [convertUnits, setConvertUnits] = useState<Converter>(() => identity)\n\n // probably can also be removed\n const [min, setMin] = useState<number>()\n const [max, setMax] = useState<number>()\n\n // todo most of this state is not needed, that hook can be refractored\n const [unitsCurrent, setUnitsCurrent] = useState<string>(units)\n\n const [decimals, setDecimals] = useState<number>(-1)\n const [intlNumberFormat, setIntlNumberFormat] = useState<Intl.NumberFormat | null>(null)\n\n const {\n // \"valueDecimalDetail\" in old app\n decimalDigits = -1,\n } = attributes\n\n\n const legendFormatValue: LegendFormatValue = useMemo(() => (\n getLegendFormatValue(\n convertUnits, intlNumberFormat, decimalDigits,\n )\n ), [convertUnits, decimalDigits, intlNumberFormat])\n\n\n const legendFormatValueRef = useRef(legendFormatValue)\n const updateLegendFormatValueRef = (\n newConvertUnits: Converter, newIntlNumberFormat: any, newDecimalDigits: any,\n ) => {\n legendFormatValueRef.current = getLegendFormatValue(\n newConvertUnits, newIntlNumberFormat, newDecimalDigits,\n )\n }\n\n const legendFormatValueDecimalsFromMinMax = useCallback((newMin: number, newMax: number) => {\n if (safeEqualCheck(min, newMin) && safeEqualCheck(max, newMax)) {\n return legendFormatValueRef.current\n }\n // we should call the convertUnits-creation only when original app was doing this\n // so we don't get new updates in improper places\n setMin(newMin)\n setMax(newMax)\n\n const newConvertUnits = unitsConversionCreator.get(\n uuid, newMin, newMax, units, unitsDesired, unitsCommon,\n (switchedUnits) => {\n setUnitsCurrent(switchedUnits)\n // that.legendSetUnitsString(that.units_current);\n // that.legendSetUnitsString just populates some DOM with unitsCurrent\n // on all occurences just take the unitsCurrent from this state\n }, temperatureSetting, secondsAsTimeSetting,\n )\n\n // as function, so useState() interpretes it properly\n setConvertUnits(() => newConvertUnits)\n\n const convertedMin = newConvertUnits(newMin)\n const convertedMax = newConvertUnits(newMax)\n\n if (typeof convertedMin !== \"number\" || typeof convertedMax !== \"number\") {\n updateLegendFormatValueRef(newConvertUnits, intlNumberFormat, decimalDigits)\n return legendFormatValueRef.current\n }\n\n let newDecimals\n\n if (data.min === data.max) {\n // it is a fixed number, let the visualizer decide based on the value\n newDecimals = -1\n } else if (decimalDigits !== -1) {\n // there is an override\n newDecimals = decimalDigits\n } else {\n // ok, let's calculate the proper number of decimal points\n let delta\n\n if (convertedMin === convertedMax) {\n delta = Math.abs(convertedMin)\n } else {\n delta = Math.abs(convertedMax - convertedMin)\n }\n\n if (delta > 1000) {\n newDecimals = 0\n } else if (delta > 10) {\n newDecimals = (1)\n } else if (delta > 1) {\n newDecimals = 2\n } else if (delta > 0.1) {\n newDecimals = 2\n } else if (delta > 0.01) {\n newDecimals = 4\n } else if (delta > 0.001) {\n newDecimals = 5\n } else if (delta > 0.0001) {\n newDecimals = 6\n } else {\n newDecimals = 7\n }\n }\n\n\n let newIntlNumberFormat = intlNumberFormat\n\n if (newDecimals !== decimals) {\n if (newDecimals < 0) {\n newIntlNumberFormat = null\n } else {\n newIntlNumberFormat = fastNumberFormat(\n newDecimals,\n newDecimals,\n )\n }\n setIntlNumberFormat(() => newIntlNumberFormat)\n setDecimals(newDecimals)\n }\n updateLegendFormatValueRef(newConvertUnits, newIntlNumberFormat, newDecimals)\n return legendFormatValueRef.current\n }, [\n decimals, decimalDigits, min, max, uuid, temperatureSetting,\n units, unitsDesired, unitsCommon, secondsAsTimeSetting,\n data.min, data.max, intlNumberFormat,\n ])\n\n\n return {\n legendFormatValue,\n legendFormatValueDecimalsFromMinMax,\n unitsCurrent,\n }\n}\n","const defaultColor = {\n r: 255,\n g: 0,\n b: 0,\n}\n\ntype ColorHex2Rgb = (hex: string) => {\n r: number,\n g: number,\n b: number\n}\nexport const colorHex2Rgb: ColorHex2Rgb = (hex) => {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i\n if (!hex) {\n return defaultColor\n }\n const hexFull = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b)\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hexFull)\n if (!result) {\n console.warn(\"wrong color format:\", hex) // eslint-disable-line no-console\n }\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n } : defaultColor\n}\n","import styled from \"styled-components\"\nimport { getSizeBy } from \"@netdata/netdata-ui\"\n\nexport const LegendContainer = styled.div`\n margin-bottom: ${getSizeBy(3)};\n padding-left: 35px;\n`\n\nexport const LegendFirstRow = styled.div`\n margin-top: 4px;\n display: flex;\n justify-content: space-between;\n`\n\nexport const LegendSecondRow = styled.div`\n margin-top: 4px;\n display: flex;\n justify-content: space-between;\n`\n\nexport const LegendUnit = styled.div`\n`\n\nexport const DateTimeSeparator = styled.span`\n margin: 0 3px;\n`\n\nexport const LegendItems = styled.div`\n display: flex;\n flex-wrap: wrap;\n overflow: auto;\n max-height: 80px;\n`\n\nexport const DimensionItem = styled.div<{ color: string, isDisabled: boolean }>`\n display: flex;\n align-items: center;\n color: ${({ color }) => color};\n margin-right: 12px;\n cursor: pointer;\n opacity: ${({ isDisabled }) => (isDisabled ? 0.3 : null)};\n user-select: none;\n font-size: 11px;\n &:focus {\n outline: none;\n }\n`\n\n// toolbox is based on \"absolute\", so to make sure it's not put on top of dimension-item\n// let's put a transparent block as last in dimension-items container. Toolbox will soon be moved\n// to other place so it's temporary\nexport const DimensionItemToolboxPlaceholder = styled.div`\n width: 140px;\n height: 20px;\n`\n\nexport const DimensionIcon = styled.div<{ color: string }>`\n width: 14px;\n height: 7px;\n border-radius: 4px;\n overflow: hidden;\n background-color: ${({ color }) => color};\n`\n\nexport const DimensionLabel = styled.span`\n margin-left: 3px;\n`\n\nexport const DimensionValue = styled.span`\n margin-left: 5px;\n min-width: 30px;\n`\n\nexport const ToolboxContainer = styled.div`\n position: relative;\n touch-action: none;\n`\n","import React, { useCallback } from \"react\"\nimport { createSelector } from \"reselect\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { DimensionLabel } from \"./chart-legend-bottom.styled\"\n\nconst emptyObject = {}\n\nconst selector = createSelector(\n selectChartData,\n ({ dimension_names: dimensionNames, keys = emptyObject }) => ({\n dimensionNames,\n keys,\n })\n)\n\nconst LegendText = ({ id, index }) => {\n const { dimensionNames, keys } = useSelector(useCallback(state => selector(state, { id }), [id]))\n const { chart, node } = keys\n\n if (chart && node && Object.keys(keys).length === 2) {\n return (\n <DimensionLabel>\n {chart[index]}@{node[index]}\n </DimensionLabel>\n )\n }\n\n const name = dimensionNames[index]\n\n return <DimensionLabel>{name}</DimensionLabel>\n}\n\nexport default LegendText\n","import React, { Fragment, useRef, useEffect, useCallback } from \"react\"\nimport classNames from \"classnames\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nimport { colorHex2Rgb } from \"utils/color-hex-2-rgb\"\nimport { useDateTime } from \"utils/date-time\"\n\nimport { legendResolutionTooltip, legendPluginModuleString } from \"../utils/legend-utils\"\n\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\n\ninterface Props {\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => (number | string)\n onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n selectedDimensions: string[]\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n}\n\nexport const ChartLegendRight = ({\n chartUuid,\n chartMetadata,\n chartLibrary,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n onDimensionClick,\n selectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n}: Props) => {\n const chartData = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n )\n const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n // todo handle also this case:\n // const netdataLast = chartData.last_entry * 1000\n // const dataUpdateEvery = chartData.view_update_every * 1000\n // showUndefined = Math.abs(netdataLast - viewBefore) > dataUpdateEvery\n // (showUndefined also when difference between last and before is bigger than granularity)\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n // todo support timezone\n const legendDate = new Date(hoveredX || viewBefore)\n\n // todo make a possibility to add chartLegened when there's not chartData\n // (if this situation is possible)\n\n // @ts-ignore ignoring because options.current has inconsistent structure\n const colorFillOpacity = window.NETDATA.options.current[\n `color_fill_opacity_${chartMetadata.chart_type}`\n ]\n\n const { localeDateString, localeTimeString } = useDateTime()\n\n const scrollbarRef = useRef(null)\n useEffect(() => {\n if (scrollbarRef.current) {\n window.Ps.initialize(scrollbarRef.current, {\n wheelSpeed: 0.2,\n wheelPropagation: true,\n swipePropagation: true,\n minScrollbarLength: null,\n maxScrollbarLength: null,\n useBothWheelAxes: false,\n suppressScrollX: true,\n suppressScrollY: false,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n theme: \"default\",\n })\n }\n }, [scrollbarRef])\n\n return (\n <div className={classNames(\n \"netdata-chart-legend\",\n `netdata-${chartLibrary}-legend`,\n )}\n >\n <span\n className=\"netdata-legend-title-date\"\n title={legendPluginModuleString(true, chartMetadata)}\n >\n {showUndefined\n ? legendPluginModuleString(false, chartMetadata)\n : localeDateString(legendDate)}\n </span>\n <br />\n <span\n className=\"netdata-legend-title-time\"\n title={legendResolutionTooltip(chartData, chartMetadata)}\n >\n {showUndefined\n ? chartMetadata.context.toString()\n : localeTimeString(legendDate)}\n </span>\n <br />\n <span className=\"netdata-legend-title-units\">{unitsCurrent}</span>\n <br />\n <div className=\"netdata-legend-series\" ref={scrollbarRef}>\n <div className=\"netdata-legend-series-content\">\n {dimensionIds.map((dimensionId, i) => {\n const dimensionName = dimensionNames[i]\n // todo dimension could be a separate component\n const color = colors[dimensionName]\n const rgb = colorHex2Rgb(color)\n\n const isSelected = selectedDimensions.length === 0\n || selectedDimensions.includes(dimensionName)\n\n let value\n if (showUndefined) {\n value = null\n } else if (hoveredRow !== -1) {\n const hoveredValueArray = chartData.result.data[hoveredRow]\n // [timestamp, valueDim1, valueDim2, ...]\n value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n } else {\n value = chartData.view_latest_values[i]\n }\n\n return (\n <Fragment key={dimensionId}>\n {i !== 0 && <br />}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n title={dimensionName}\n className={classNames(\n \"netdata-legend-name\",\n isSelected ? \"selected\" : \"not-selected\",\n )}\n onClick={(event) => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n style={{ color }}\n tabIndex={0}\n >\n <table\n className={`netdata-legend-name-table-${chartMetadata.chart_type}`}\n style={{\n backgroundColor: `rgba(${rgb.r},${rgb.g},${rgb.b},${colorFillOpacity})`,\n }}\n >\n <tbody>\n <tr className=\"netdata-legend-name-tr\">\n <td className=\"netdata-legend-name-td\" />\n </tr>\n </tbody>\n </table>\n {\" \"}\n <LegendText id={chartUuid} index={i} />\n </span>\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n title={dimensionName}\n className={classNames(\n \"netdata-legend-value\",\n !isSelected && \"hidden\",\n )}\n onClick={(event) => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n style={{ color }} // omitted !important during refractor, react doesn't support it\n tabIndex={0}\n >\n {legendFormatValue(\n value,\n )}\n </span>\n </Fragment>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useCallback } from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { legendPluginModuleString, legendResolutionTooltip } from \"domains/chart/utils/legend-utils\"\nimport { ChartMetadata } from \"../chart-types\"\nimport LegendText from \"./legendText\"\nimport * as S from \"./chart-legend-bottom.styled\"\ninterface Props {\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => number | string\n onDimensionClick: (clickedDimensionName: string, event: React.MouseEvent) => void\n selectedDimensions: string[]\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n legendToolbox: JSX.Element\n resizeHandler: React.ReactNode\n}\n\nexport const ChartTimeframe = ({\n chartMetadata,\n showUndefined,\n hoveredX,\n viewBefore,\n chartData,\n}: any) => {\n const { localeDateString, localeTimeString } = useDateTime()\n\n const legendDate = new Date(hoveredX || viewBefore)\n\n return (\n <div>\n <span title={legendPluginModuleString(true, chartMetadata)}>\n {showUndefined\n ? legendPluginModuleString(false, chartMetadata)\n : localeDateString(legendDate)}\n </span>\n <S.DateTimeSeparator>|</S.DateTimeSeparator>\n <span title={legendResolutionTooltip(chartData, chartMetadata)}>\n {showUndefined ? chartMetadata.context.toString() : localeTimeString(legendDate)}\n </span>\n </div>\n )\n}\n\nexport const ChartLegendBottom = ({\n chartUuid,\n chartMetadata,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n onDimensionClick,\n selectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n legendToolbox,\n resizeHandler,\n}: Props) => {\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n const chartData = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }), [chartUuid])\n )\n const { dimension_names: dimensionNames, dimension_ids: dimensionIds } = chartData\n\n return (\n <S.LegendContainer>\n <S.LegendFirstRow>\n <S.LegendUnit>{unitsCurrent}</S.LegendUnit>\n <ChartTimeframe\n chartMetadata={chartMetadata}\n showUndefined={showUndefined}\n hoveredX={hoveredX}\n viewBefore={viewBefore}\n chartData={chartData}\n />\n </S.LegendFirstRow>\n <S.LegendSecondRow>\n <S.LegendItems>\n {dimensionIds.map((dimensionId, i) => {\n const dimensionName = dimensionNames[i]\n const color = colors[dimensionName]\n\n const isSelected =\n selectedDimensions.length === 0 || selectedDimensions.includes(dimensionName)\n\n let value\n if (showUndefined) {\n value = null\n } else if (hoveredRow !== -1) {\n const hoveredValueArray = chartData.result.data[hoveredRow]\n // [timestamp, valueDim1, valueDim2, ...]\n value = hoveredValueArray ? hoveredValueArray[i + 1] : null\n } else {\n value = chartData.view_latest_values[i]\n }\n return (\n <S.DimensionItem\n color={color}\n onClick={event => {\n onDimensionClick(dimensionName, event)\n }}\n role=\"button\"\n tabIndex={0}\n isDisabled={!isSelected}\n key={dimensionId}\n >\n <S.DimensionIcon title={dimensionName} color={color} />\n <LegendText id={chartUuid} index={i} />\n <S.DimensionValue>{isSelected && legendFormatValue(value)}</S.DimensionValue>\n </S.DimensionItem>\n )\n })}\n <S.DimensionItemToolboxPlaceholder />\n </S.LegendItems>\n <S.ToolboxContainer>\n {legendToolbox}\n {resizeHandler}\n </S.ToolboxContainer>\n </S.LegendSecondRow>\n </S.LegendContainer>\n )\n}\n","import React, { useCallback } from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectChartData } from \"domains/chart/selectors\"\nimport { getNewSelectedDimensions } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../chart-types\"\n\nimport { ChartLegendRight } from \"./chart-legend-right\"\nimport { ChartLegendBottom } from \"./chart-legend-bottom\"\n\ninterface Props {\n attributes: Attributes\n chartUuid: string\n chartMetadata: ChartMetadata\n chartLibrary: string\n colors: {\n [key: string]: string\n }\n hoveredRow: number\n hoveredX: number | null\n legendFormatValue: (value: number | string | null) => number | string\n selectedDimensions: string[]\n setSelectedDimensions: (selectedDimensions: string[]) => void\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewBefore: number\n legendToolbox: JSX.Element\n resizeHandler: React.ReactNode\n}\n\nexport const ChartLegend = ({\n attributes,\n chartUuid,\n chartMetadata,\n chartLibrary,\n colors,\n hoveredRow,\n hoveredX,\n legendFormatValue,\n selectedDimensions,\n setSelectedDimensions,\n showLatestOnBlur,\n unitsCurrent,\n viewBefore,\n legendToolbox,\n resizeHandler,\n}: Props) => {\n const dimension_names = useSelector(\n useCallback((state: any) => selectChartData(state, { id: chartUuid }).dimension_names, [\n chartUuid,\n ])\n )\n\n const onDimensionClick = (clickedDimensionName: string, event: React.MouseEvent) => {\n event.preventDefault()\n const isModifierKeyPressed = event.shiftKey || event.ctrlKey\n const newSelectedDimensions = getNewSelectedDimensions({\n allDimensions: dimension_names,\n selectedDimensions,\n clickedDimensionName,\n isModifierKeyPressed,\n })\n setSelectedDimensions(newSelectedDimensions)\n }\n\n if (attributes.legendPosition === \"bottom\") {\n return (\n <ChartLegendBottom\n chartUuid={chartUuid}\n chartLibrary={chartLibrary}\n chartMetadata={chartMetadata}\n colors={colors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n legendFormatValue={legendFormatValue}\n onDimensionClick={onDimensionClick}\n selectedDimensions={selectedDimensions}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewBefore={viewBefore}\n legendToolbox={legendToolbox}\n resizeHandler={resizeHandler}\n />\n )\n }\n\n return (\n <ChartLegendRight\n chartUuid={chartUuid}\n chartLibrary={chartLibrary}\n chartMetadata={chartMetadata}\n colors={colors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n legendFormatValue={legendFormatValue}\n onDimensionClick={onDimensionClick}\n selectedDimensions={selectedDimensions}\n showLatestOnBlur={showLatestOnBlur}\n unitsCurrent={unitsCurrent}\n viewBefore={viewBefore}\n />\n )\n}\n","import React from \"react\"\n\nimport { ToolboxButton } from \"./toolbox-button\"\n\ntype ClickCallback = (event: React.MouseEvent) => void\ninterface Props {\n onToolboxLeftClick: ClickCallback\n onToolboxResetClick: ClickCallback\n onToolboxRightClick: ClickCallback\n onToolboxZoomInClick: ClickCallback\n onToolboxZoomOutClick: ClickCallback\n}\nexport const LegendToolbox = ({\n onToolboxLeftClick,\n onToolboxResetClick,\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={onToolboxResetClick}\n iconType=\"reset\"\n popoverTitle=\"Chart Reset\"\n popoverContent=\"Reset all the charts to their default auto-refreshing state. You can also\n <b>double click</b> the chart contents with your mouse or your finger (on touch devices).\n <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 React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst Container = styled.div`\n display: block;\n`\n\nconst ProceededChartDisclaimer = forwardRef((\n props: React.HTMLAttributes<HTMLElement>,\n ref: React.Ref<HTMLDivElement>,\n) => (\n <Container ref={ref} className=\"dygraph__history-tip\" data-testid=\"proceededChartDisclaimer\">\n <span className=\"dygraph__history-tip-content\">\n Want to extend your history of real-time metrics?\n <br />\n <a href=\"https://learn.netdata.cloud/guides/longer-metrics-storage/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-configure\">\n Configure Netdata&apos;s&nbsp;\n <b>history</b>\n </a>\n &nbsp;or use the&nbsp;\n <a href=\"https://learn.netdata.cloud/docs/agent/database/engine/\" target=\"_blank\" rel=\"noopener noreferrer\" data-testid=\"proceededChartDisclaimer-engine\">DB engine</a>\n .\n </span>\n </Container>\n))\n\nexport default ProceededChartDisclaimer\n","import React, { forwardRef } from \"react\"\nimport styled from \"styled-components\"\n\nconst backgroundColorMap = {\n WARNING: \"#FFF8E1\",\n CRITICAL: \"#FFEBEF\",\n CLEAR: \"#E5F5E8\",\n}\nexport const getBackgroundColor = (status) => backgroundColorMap[status] || null\n\nconst borderColorMap = {\n WARNING: \"#FFC300\",\n CRITICAL: \"#F59B9B\",\n CLEAR: \"#68C47D\",\n}\nexport const getBorderColor = (status) => borderColorMap[status] || null\n\nconst textColorMap = {\n WARNING: \"#536775\",\n CRITICAL: \"#FF4136\",\n CLEAR: \"#00AB44\",\n}\nexport const getColor = (status) => textColorMap[status] || null\n\nconst Container = styled.div`\n position: absolute;\n margin-right: 10px;\n overflow: hidden;\n pointer-events: none;\n direction: rtl;\n z-index: 10; // higher than chart\n`\n\nconst Badge = styled.div`\n display: inline-block;\n border-radius: 36px;\n padding: 2px 12px;\n background: ${({ background }) => background};\n border: 1px solid ${({ border }) => border};\n color: ${({ color }) => color};\n font-size: 12px;\n font-weight: 700;\n direction: ltr;\n white-space: nowrap;\n`\n\nexport default forwardRef((\n { isVisible, status, label },\n ref,\n) => (\n <Container ref={ref}>\n {isVisible && (\n <Badge\n background={getBackgroundColor(status)}\n border={getBorderColor(status)}\n color={getColor(status)}\n >\n {label}\n </Badge>\n )}\n </Container>\n))\n","import { sortBy, reverse } from \"ramda\"\nimport React, {\n useLayoutEffect, useRef, useCallback,\n} from \"react\"\nimport classNames from \"classnames\"\nimport { useUpdateEffect, useUnmount, useMount } from \"react-use\"\n// this version is needed because it contains a fix for handling constant value in the chart\n// ie. https://github.com/danvk/dygraphs/pull/909\nimport Dygraph from \"vendor/dygraph-c91c859.min\"\nimport \"dygraphs/src-es5/extras/smooth-plotter\"\nimport ResizeObserver from \"resize-observer-polyfill\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { AppStateT } from \"store/app-state\"\nimport { DygraphArea, NetdataDygraph } from \"types/vendor-overrides\"\nimport { TimeRange } from \"types/common\"\nimport { useDateTime } from \"utils/date-time\"\nimport { debounce } from \"utils/debounce\"\n\nimport {\n selectCommonMin,\n selectCommonMax,\n selectGlobalChartUnderlay,\n selectGlobalSelectionMaster,\n selectSmoothPlot,\n selectSyncPanAndZoom,\n selectSpacePanelTransitionEndIsActive,\n selectAlarm,\n} from \"domains/global/selectors\"\nimport {\n resetGlobalPanAndZoomAction, setCommonMaxAction, setCommonMinAction,\n} from \"domains/global/actions\"\nimport { resetChartPanAndZoomAction } from \"domains/chart/actions\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport {\n chartLibrariesSettings,\n ChartLibraryConfig,\n ChartLibraryName,\n} from \"../../utils/chartLibrariesSettings\"\nimport { ChartMetadata, DygraphData } from \"../../chart-types\"\nimport { selectResizeHeight } from \"../../selectors\"\n\nimport {\n getDygraphChartType, getDataForFakeStacked, transformColors, getDygraphFillAlpha,\n hackDygraphIFrameTarps,\n} from \"./dygraph/utils\"\nimport \"./dygraph-chart.css\"\n\nimport useProceededChart from \"../../hooks/use-proceeded-chart\"\nimport useDygraphBadge from \"../../hooks/useDygraphBadge\"\nimport ProceededChartDisclaimer from \"./proceeded-chart-disclaimer\"\nimport AlarmBadge, { getBorderColor } from \"./alarmBadge\"\n\n// This is the threshold above which we assume chart shown duration has changed\nconst timeframeThreshold = 5000\nconst dygraphResizeDebounceTime = 500\n\ntype IsInRangeOfAvailableData = (props: {\n after: number, before: number, chartData: DygraphData,\n}) => boolean\nconst isInRangeOfAvailableData: IsInRangeOfAvailableData = ({ after, before, chartData }) => (\n after >= (chartData.first_entry * 1000) && before <= (chartData.last_entry * 1000)\n)\n\ninterface GetInitialDygraphOptions {\n attributes: Attributes,\n chartData: DygraphData,\n chartMetadata: ChartMetadata,\n chartSettings: ChartLibraryConfig,\n dimensionsVisibility: boolean[]\n hiddenLabelsElementId: string,\n isFakeStacked: boolean,\n orderedColors: string[],\n setMinMax: (minMax: TimeRange) => void\n shouldSmoothPlot: boolean,\n unitsCurrent: string,\n xAxisDateString: (d: Date) => string,\n xAxisTimeString: (d: Date) => string,\n}\nconst getInitialDygraphOptions = ({\n attributes,\n chartData,\n chartMetadata,\n chartSettings,\n dimensionsVisibility,\n hiddenLabelsElementId,\n isFakeStacked,\n orderedColors,\n setMinMax,\n shouldSmoothPlot,\n unitsCurrent,\n xAxisDateString,\n xAxisTimeString,\n}: GetInitialDygraphOptions) => {\n const isSparkline = attributes.dygraphTheme === \"sparkline\"\n const highlightCircleSize = isSparkline ? 3 : 4\n\n const isLogScale = (chartSettings.isLogScale as ((a: Attributes) => boolean))(attributes)\n const dygraphChartType = getDygraphChartType(attributes, chartData, chartMetadata, chartSettings)\n const {\n dygraphSmooth = dygraphChartType === \"line\"\n && !isSparkline,\n dygraphDrawAxis = true,\n legendPosition,\n } = attributes\n const isLegendOnBottom = legendPosition === \"bottom\"\n const {\n // destructuring with default values\n dygraphColors = orderedColors,\n dygraphRightGap = 5,\n dygraphShowRangeSelector = false,\n dygraphShowRoller = false,\n dygraphTitle = attributes.title || chartMetadata.title,\n dygraphTitleHeight = 19,\n dygraphLegend = \"always\",\n dygraphLabelsDiv = hiddenLabelsElementId,\n dygraphLabelsSeparateLine = true,\n dygraphIncludeZero = dygraphChartType === \"stacked\",\n dygraphShowZeroValues = true,\n dygraphShowLabelsOnHighLight = true,\n dygraphHideOverlayOnMouseOut = true,\n dygraphXRangePad = 0,\n dygraphYRangePad = 1,\n dygraphValueRange = [null, null],\n dygraphYLabelWidth = 12,\n // eslint-disable-next-line no-nested-ternary\n dygraphStrokeWidth = dygraphChartType === \"stacked\"\n ? 0.1\n : (dygraphSmooth === true\n ? 1.5\n : 0.7),\n\n dygraphStrokePattern,\n dygraphDrawPoints = false,\n dygraphDrawGapEdgePoints = true,\n dygraphConnectSeparatedPoints = false,\n dygraphPointSize = 1,\n dygraphStepPlot = false,\n dygraphStrokeBorderColor = window.NETDATA.themes.current.background,\n dygraphStrokeBorderWidth = 0,\n dygraphFillGraph = (dygraphChartType === \"area\" || dygraphChartType === \"stacked\"),\n dygraphFillAlpha = getDygraphFillAlpha(isFakeStacked, dygraphChartType),\n dygraphStackedGraph = dygraphChartType === \"stacked\" && !isFakeStacked,\n dygraphStackedGraphNanFill = \"none\",\n dygraphAxisLabelFontSize = 10,\n dygraphAxisLineColor = window.NETDATA.themes.current.axis,\n dygraphAxisLineWidth = 1.0,\n dygraphDrawGrid = true,\n dygraphGridLinePattern,\n dygraphGridLineWidth = 1.0,\n dygraphGridLineColor = window.NETDATA.themes.current.grid,\n dygraphMaxNumberWidth = 8,\n dygraphSigFigs,\n dygraphDigitsAfterDecimal = 2,\n dygraphHighlighCircleSize = highlightCircleSize,\n dygraphHighlightSeriesOpts,\n dygraphHighlightSeriesBackgroundAlpha,\n\n dygraphXPixelsPerLabel = 50,\n dygraphXAxisLabelWidth = 60,\n dygraphDrawXAxis = dygraphDrawAxis,\n dygraphYPixelsPerLabel = 15,\n dygraphYAxisLabelWidth = isLegendOnBottom ? 30 : 50,\n dygraphDrawYAxis = dygraphDrawAxis,\n } = attributes\n return {\n colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n\n // leave a few pixels empty on the right of the chart\n rightGap: isSparkline ? 0 : dygraphRightGap,\n showRangeSelector: dygraphShowRangeSelector,\n showRoller: dygraphShowRoller,\n title: isSparkline ? undefined : dygraphTitle,\n titleHeight: dygraphTitleHeight,\n legend: dygraphLegend, // we need this to get selection events\n labels: chartData.result.labels,\n labelsDiv: dygraphLabelsDiv,\n\n labelsSeparateLines: isSparkline ? true : dygraphLabelsSeparateLine,\n labelsShowZeroValues: isLogScale ? false : dygraphShowZeroValues,\n labelsKMB: false,\n labelsKMG2: false,\n showLabelsOnHighlight: dygraphShowLabelsOnHighLight,\n hideOverlayOnMouseOut: dygraphHideOverlayOnMouseOut,\n includeZero: dygraphIncludeZero,\n xRangePad: dygraphXRangePad,\n yRangePad: isSparkline ? 1 : dygraphYRangePad,\n valueRange: dygraphValueRange,\n ylabel: (isSparkline || isLegendOnBottom) ? undefined : unitsCurrent,\n yLabelWidth: (isSparkline || isLegendOnBottom) ? 0 : dygraphYLabelWidth,\n\n // the function to plot the chart\n plotter: (dygraphSmooth && shouldSmoothPlot) ? window.smoothPlotter : null,\n\n // The width of the lines connecting data points.\n // This can be used to increase the contrast or some graphs.\n strokeWidth: dygraphStrokeWidth,\n strokePattern: dygraphStrokePattern,\n\n // The size of the dot to draw on each point in pixels (see drawPoints).\n // A dot is always drawn when a point is \"isolated\",\n // i.e. there is a missing point on either side of it.\n // This also controls the size of those dots.\n drawPoints: dygraphDrawPoints,\n\n // Draw points at the edges of gaps in the data.\n // This improves visibility of small data segments or other data irregularities.\n drawGapEdgePoints: dygraphDrawGapEdgePoints,\n connectSeparatedPoints: isLogScale ? false : dygraphConnectSeparatedPoints,\n pointSize: dygraphPointSize,\n\n // enabling this makes the chart with little square lines\n stepPlot: dygraphStepPlot,\n\n // Draw a border around graph lines to make crossing lines more easily\n // distinguishable. Useful for graphs with many lines.\n strokeBorderColor: dygraphStrokeBorderColor,\n strokeBorderWidth: dygraphStrokeBorderWidth,\n fillGraph: dygraphFillGraph,\n fillAlpha: dygraphFillAlpha,\n stackedGraph: dygraphStackedGraph,\n stackedGraphNaNFill: dygraphStackedGraphNanFill,\n drawAxis: isSparkline ? false : dygraphDrawAxis,\n axisLabelFontSize: dygraphAxisLabelFontSize,\n axisLineColor: dygraphAxisLineColor,\n axisLineWidth: dygraphAxisLineWidth,\n drawGrid: isSparkline ? false : dygraphDrawGrid,\n gridLinePattern: dygraphGridLinePattern,\n gridLineWidth: dygraphGridLineWidth,\n gridLineColor: dygraphGridLineColor,\n maxNumberWidth: dygraphMaxNumberWidth,\n sigFigs: dygraphSigFigs,\n digitsAfterDecimal: dygraphDigitsAfterDecimal,\n highlightCircleSize: dygraphHighlighCircleSize,\n highlightSeriesOpts: dygraphHighlightSeriesOpts, // TOO SLOW: { strokeWidth: 1.5 },\n // TOO SLOW: (state.tmp.dygraph_chart_type === 'stacked')?0.7:0.5,\n highlightSeriesBackgroundAlpha: dygraphHighlightSeriesBackgroundAlpha,\n visibility: dimensionsVisibility,\n logscale: isLogScale,\n\n axes: {\n x: {\n pixelsPerLabel: dygraphXPixelsPerLabel,\n // unsufficient typings for Dygraph\n // @ts-ignore\n ticker: Dygraph.dateTicker,\n axisLabelWidth: dygraphXAxisLabelWidth,\n drawAxis: isSparkline ? false : dygraphDrawXAxis,\n axisLabelFormatter: (d: Date | number) => ((d as Date).toTimeString().startsWith(\"00:00:00\")\n ? xAxisDateString(d as Date)\n : xAxisTimeString(d as Date)\n ),\n },\n y: {\n logscale: isLogScale,\n pixelsPerLabel: dygraphYPixelsPerLabel,\n axisLabelWidth: dygraphYAxisLabelWidth,\n drawAxis: isSparkline ? false : dygraphDrawYAxis,\n // axisLabelFormatter is added on the updates\n axisLabelFormatter(y: Date | number) {\n const formatter = setMinMax([\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n this.axes_[0].extremeRange[0],\n // @ts-ignore\n // eslint-disable-next-line no-underscore-dangle\n this.axes_[0].extremeRange[1],\n ]) as unknown as ((value: Date | number) => string)\n return formatter(y as number)\n },\n },\n },\n }\n}\n\ninterface Props {\n attributes: Attributes\n chartData: DygraphData\n chartMetadata: ChartMetadata\n chartElementClassName: string\n chartElementId: string\n chartLibrary: ChartLibraryName\n chartUuid: string\n colors: {\n [key: string]: string\n }\n dimensionsVisibility: boolean[]\n hasEmptyData: boolean\n hasLegend: boolean\n isRemotelyControlled: boolean\n onUpdateChartPanAndZoom: (arg: {\n after: number, before: number,\n callback: (after: number, before: number) => void,\n masterID: string,\n shouldNotExceedAvailableRange: boolean,\n }) => void\n orderedColors: string[]\n immediatelyDispatchPanAndZoom: () => void\n\n hoveredRow: number\n hoveredX: number | null\n setGlobalChartUnderlay: (arg: { after: number, before: number, masterID: string }) => void\n setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n setMinMax: (minMax: TimeRange) => void\n unitsCurrent: string\n viewAfter: number\n viewBefore: number\n}\nexport const DygraphChart = ({\n attributes,\n chartData,\n chartMetadata,\n chartElementClassName,\n chartElementId,\n chartLibrary,\n // colors,\n chartUuid,\n dimensionsVisibility,\n hasEmptyData,\n hasLegend,\n isRemotelyControlled,\n onUpdateChartPanAndZoom,\n orderedColors,\n immediatelyDispatchPanAndZoom,\n\n hoveredRow,\n hoveredX,\n setGlobalChartUnderlay,\n setHoveredX,\n setMinMax,\n unitsCurrent,\n viewAfter,\n viewBefore,\n}: Props) => {\n const globalChartUnderlay = useSelector(selectGlobalChartUnderlay)\n const selectedAlarm = useSelector(selectAlarm)\n const alarm = selectedAlarm?.chartId === chartData.id ? selectedAlarm : null\n\n const { 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 [isBadgeVisible, 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 }, [alarm, chartData, globalChartUnderlay, hoveredX, immediatelyDispatchPanAndZoom,\n resetGlobalPanAndZoom, setGlobalChartUnderlay, updateAlarmBadge, updateChartPanOrZoom, viewAfter, viewBefore])\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 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: chartUuid,\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 // Take the offset of a mouse event on the dygraph canvas and\n // convert it to a pair of percentages from the bottom left.\n // (Not top left, bottom is where the lower value is.)\n function offsetToPercentage(g: Dygraph, offsetX: number, offsetY: number) {\n // This is calculating the pixel offset of the leftmost date.\n const xOffset = g.toDomXCoord(g.xAxisRange()[0])\n const yar0 = g.yAxisRange(0)\n\n // This is calculating the pixel of the highest value. (Top pixel)\n const yOffset = g.toDomYCoord(yar0[1])\n\n // x y w and h are relative to the corner of the drawing area,\n // so that the upper corner of the drawing area is (0, 0).\n const x = offsetX - xOffset\n const y = offsetY - yOffset\n\n // This is computing the rightmost pixel, effectively defining the\n // width.\n // const w = g.toDomCoords(g.xAxisRange()[1], null)[0] - xOffset\n const w = g.toDomXCoord(g.xAxisRange()[1]) - xOffset\n\n // This is computing the lowest pixel, effectively defining the height.\n // const h = g.toDomCoords(null, yar0[0])[1] - yOffset\n const h = g.toDomYCoord(yar0[0]) - yOffset\n\n // Percentage from the left.\n const xPct = w === 0 ? 0 : (x / w)\n // Percentage from the top.\n const yPct = h === 0 ? 0 : (y / h)\n\n // The (1-) part below changes it from \"% distance down from the top\"\n // to \"% distance up from the bottom\".\n return [xPct, (1 - yPct)]\n }\n\n function adjustAxis(axis: [number, number], zoomInPercentage: number, bias: number) {\n const delta = axis[1] - axis[0]\n const increment = delta * zoomInPercentage\n const foo = [increment * bias, increment * (1 - bias)]\n\n return [axis[0] + foo[0], axis[1] - foo[1]]\n }\n\n // Adjusts [x, y] toward each other by zoomInPercentage%\n // Split it so the left/bottom axis gets xBias/yBias of that change and\n // tight/top gets (1-xBias)/(1-yBias) of that change.\n //\n // If a bias is missing it splits it down the middle.\n function zoomRange(g: Dygraph, zoomInPercentage: number, xBias: number, yBias: number) {\n const yAxes = g.yAxisRanges()\n const newYAxes = []\n for (let i = 0; i < yAxes.length; i += 1) {\n newYAxes[i] = adjustAxis(yAxes[i], zoomInPercentage, (yBias || 0.5))\n }\n\n return adjustAxis(g.xAxisRange(), zoomInPercentage, (xBias || 0.5))\n }\n\n if (event.altKey || event.shiftKey) {\n latestIsUserAction.current = true\n\n // http://dygraphs.com/gallery/interaction-api.js\n let normalDef\n // @ts-ignore\n if (typeof event.wheelDelta === \"number\" && !Number.isNaN(event.wheelDelta)) {\n // chrome\n // @ts-ignore\n normalDef = event.wheelDelta / 40\n } else {\n // firefox\n normalDef = event.deltaY * -1.2\n }\n\n const normal = (event.detail) ? event.detail * -1 : normalDef\n const percentage = normal / 50\n\n const percentages = offsetToPercentage(dygraph, event.offsetX, event.offsetY)\n const xPct = percentages[0]\n const yPct = percentages[1]\n\n const [after, before] = zoomRange(dygraph, percentage, xPct, yPct)\n\n propsRef.current.updateChartPanOrZoom({\n after,\n before,\n shouldNotExceedAvailableRange: true,\n callback: (updatedAfter: number, updatedBefore: number) => {\n dygraph.updateOptions({\n dateWindow: [updatedAfter, updatedBefore],\n })\n },\n })\n\n event.preventDefault()\n }\n },\n\n click(event: MouseEvent) {\n event.preventDefault()\n },\n\n dblclick() {\n 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])\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 dygraphInstance.current.updateOptions({\n ...optionsDateWindow,\n colors: isFakeStacked ? transformColors(reverse(dygraphColors)) : dygraphColors,\n file,\n labels: chartData.result.labels,\n fillAlpha: dygraphFillAlpha,\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 dygraphInstance.current.updateOptions(dygraphOptionsStatic)\n }, [dygraphChartType])\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 && hasLegend && (\n // @ts-ignore\n <AlarmBadge isVisible={isBadgeVisible} ref={alarmBadgeRef} status={alarm.status} label={alarm.value} />\n )}\n <div className=\"dygraph-chart__labels-hidden\" id={hiddenLabelsElementId} />\n </>\n )\n}\n","import { useRef } from \"react\"\nimport { useToggle } from \"react-use\"\n\nconst badgeTopMargin = \"40px\"\n\nexport default () => {\n const [isRendered, toggleIsRendered] = useToggle(false)\n\n const ref = useRef(null)\n\n const updatePosition = (isVisible, g, position) => {\n if (!isVisible) {\n toggleIsRendered(false)\n return\n }\n\n if (ref.current) {\n toggleIsRendered(true)\n const { x } = g.getArea()\n\n ref.current.style.left = `${x}px`\n ref.current.style.right = `calc(100% - ${position}px)`\n ref.current.style.top = badgeTopMargin\n }\n }\n\n return [isRendered, ref, updatePosition]\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 setMinMax(safeMinMax as [number, number])\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 setMinMax([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 cellSize = 11\nexport const padding = 1\nexport const cellBoxSize = cellSize - padding\n\nexport const aspectRatio = Math.round(16 / 9)\n\nexport const getRows = (data) => Math.sqrt(data.length / aspectRatio)\nexport const getColumns = (rows) => rows * aspectRatio\n\nexport const getXPosition = (columns, index) => Math.floor(index % columns) * cellSize\nexport const getYPosition = (columns, index) => Math.floor(index / columns) * cellSize\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 { cellSize, cellBoxSize, getRows, getColumns, getXPosition, getYPosition } from \"./utilities\"\nimport registerEvents from \"./events\"\n\nexport const getWidth = (data) => {\n const rows = getRows(data)\n const columns = getColumns(rows)\n return Math.ceil(columns) * cellSize\n}\n\nconst getCanvasAttributes = (data) => {\n const rows = getRows(data)\n const columns = getColumns(rows)\n const width = Math.ceil(columns) * cellSize\n const height = Math.ceil(rows) * cellSize + cellSize\n return { width, height, columns: Math.ceil(columns) }\n}\n\nconst makeGetColor = (values) =>\n scaleLinear()\n .domain(extent(values, (value) => value))\n .range([\"rgba(198, 227, 246, 0.9)\", \"rgba(14, 154, 255, 0.9)\"])\n\nexport default (el, { onMouseenter, onMouseout }) => {\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)\n el.width = width\n el.height = height\n clear()\n clearEvents()\n const getColor = makeGetColor(data)\n\n const drawBox = (value, index) => {\n canvas.fillStyle = getColor(value)\n canvas.fillRect(\n getXPosition(columns, index),\n getYPosition(columns, index),\n cellBoxSize,\n cellBoxSize\n )\n }\n\n data.forEach(drawBox)\n\n clearEvents = registerEvents(el, columns, data.length, { onMouseenter, onMouseout })\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)\n const offsetY = getYPosition(columns, index)\n\n canvas.lineWidth = 1\n canvas.strokeStyle = \"#fff\"\n canvas.strokeRect(offsetX + 1, offsetY + 1, cellBoxSize - 2, cellBoxSize - 2)\n }\n }\n\n return {\n clear,\n update,\n activateBox: (index) => activateBox(index),\n deactivateBox: () => deactivateBox(),\n }\n}\n","/* eslint-disable object-curly-newline */\n/* eslint-disable no-param-reassign */\n// @ts-nocheck\nimport { cellSize, cellBoxSize, getXPosition, getYPosition } from \"./utilities\"\n\nexport default (el, columns, total, { onMouseenter, onMouseout }) => {\n let hoveredIndex = -1\n\n const getEvent = (index) => {\n const rect = el.getBoundingClientRect()\n const offsetX = getXPosition(columns, index)\n const offsetY = getYPosition(columns, index)\n const left = rect.left + offsetX\n const top = rect.top + offsetY\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 = Math.floor(offsetX / cellSize)\n const y = Math.floor(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 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 }: 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(canvasRef.current, {\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 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={[\"gray\", \"shuttleGray\"]} />\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={[\"white\", \"pure\"]} 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 }) =>\n active && `border-bottom: 3px solid ${getColor([\"white\", \"almost\"])({ theme })};`}\n color: ${({ active, theme }) =>\n getColor(active ? [\"white\", \"almost\"] : [\"gray\", \"nepal\"])({ 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: [\"gray\", \"shuttleGray\"] }}\n column\n data-testid=\"k8sPopoverSection\"\n >\n <Flex justifyContent=\"between\" data-testid=\"k8sPopoverSection-header\">\n <H6 color={[\"gray\", \"aluminium\"]} wordBreak=\"break-all\">\n {title}\n </H6>\n {onExpand && <ExpandButton onClick={onExpand} />}\n </Flex>\n <Flex gap={4} column data-testid=\"k8sPopoverSection-content\">\n {children}\n </Flex>\n </Flex>\n)\n\nexport default Section\n","import {\n LOCALSTORAGE_HEIGHT_KEY_PREFIX,\n LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD,\n} from \"domains/chart/components/resize-handler\"\n\nimport { LEGEND_BOTTOM_SINGLE_LINE_HEIGHT } from \"domains/chart/utils/legend-utils\"\nimport { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetPortalNodeStyles = (\n attributes: Attributes,\n chartSettings: ChartLibraryConfig,\n shouldAddSpecialHeight: boolean,\n) => {\n height: string | undefined,\n width: string | undefined,\n minWidth: string | undefined\n}\n\nconst oldDefaultHeights = [\"180px\", \"90px\"]\n\nconst getHeightFromLocalStorage = (heightID: string, isLegendOnBottom: boolean) => {\n const persitedHeight = localStorage.getItem(`${LOCALSTORAGE_HEIGHT_KEY_PREFIX}${heightID}`)\n if (persitedHeight) {\n if (Number.isNaN(Number(persitedHeight))) {\n return null\n }\n return `${isLegendOnBottom\n ? Number(persitedHeight) + LEGEND_BOTTOM_SINGLE_LINE_HEIGHT\n : persitedHeight\n }px`\n }\n\n // We'll support the old key for few months, so that user's custom heights will be working,\n // but we'll save any changes only to the new key.\n const persistedHeightOld = localStorage.getItem(\n `${LOCALSTORAGE_HEIGHT_KEY_PREFIX_OLD}${heightID}`,\n )\n if (persistedHeightOld) {\n if (oldDefaultHeights.includes(persistedHeightOld)) {\n // If saved value looks like `oldDefaultHeights`, then it is most likely an automatic value\n // from old dashboard. Don't import it anymore. On next resize the height will be persisted\n // to the new key.\n return null\n }\n return persistedHeightOld\n }\n return null\n}\n\nexport const getPortalNodeStyles: GetPortalNodeStyles = (\n attributes,\n chartSettings,\n shouldAddSpecialHeight,\n) => {\n let width\n if (typeof attributes.width === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n width = attributes.width\n } else if (typeof attributes.width === \"number\") {\n width = `${attributes.width.toString()}px`\n }\n let height\n if (chartSettings.aspectRatio === undefined) {\n if (typeof attributes.height === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n height = attributes.height\n } else if (typeof attributes.height === \"number\") {\n height = `${attributes.height.toString()}px`\n }\n }\n const isLegendOnBottom = attributes.legendPosition === \"bottom\"\n\n const heightFromLocalStorage = attributes.heightId\n ? getHeightFromLocalStorage(attributes.heightId, isLegendOnBottom)\n : null\n\n if (heightFromLocalStorage) {\n // .replace() is for backwards compatibility - old dashboard was always doing\n // JSON.stringify when setting localStorage so many users have '\"180px\"' values set.\n // We can remove .replace() after some time\n height = heightFromLocalStorage.replace(/\"/g, \"\")\n }\n\n if (shouldAddSpecialHeight) {\n const heightOverriden = isLegendOnBottom\n ? window.innerHeight * 0.5\n : window.innerHeight * 0.4\n height = `${heightOverriden}px`\n }\n\n const chartDefaultsMinWidth = window.NETDATA.chartDefaults.min_width\n const minWidth = chartDefaultsMinWidth === null\n ? undefined\n : chartDefaultsMinWidth\n return {\n height,\n width,\n minWidth,\n }\n}\n","import {\n useEffect, useRef, useState, MutableRefObject,\n} from \"react\"\n\nconst globalIntersectionOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: undefined,\n}\n\ntype IntersectionCallback = (isVisible: boolean) => void\ntype Listener = {\n element: HTMLElement,\n callback: IntersectionCallback,\n}\nconst createGlobalIntersectionObserver = () => {\n let listeners: Listener[] = []\n const globalHandler = (entries: IntersectionObserverEntry[]) => {\n entries.forEach(({ isIntersecting, target }) => {\n const callback = listeners.find(({ element }) => element === target)?.callback\n if (callback) {\n callback(isIntersecting)\n }\n })\n }\n const globalObserver = new IntersectionObserver(globalHandler, globalIntersectionOptions)\n\n return {\n subscribe: (element: HTMLElement, callback: IntersectionCallback) => {\n globalObserver.observe(element)\n listeners = listeners.concat({ element, callback })\n },\n unsubscribe: (elementToUnsubscribe: HTMLElement) => {\n listeners = listeners.filter(({ element }) => element !== elementToUnsubscribe)\n },\n }\n}\nconst globalIntersectionObserver = createGlobalIntersectionObserver()\n\n\n// this hook is created for 2 reasons:\n// 1) to use the same IntersectionObserver for all charts (contrary to use-intersection from\n// react-use, which creates new observer for every hook)\n// 2) to update the isVisible state only when necessary (contrary to what \"use-in-view\" hook from\n// https://github.com/thebuilder/react-intersection-observer does)\nexport const useCommonIntersection = (\n element: HTMLElement,\n clonedChildrenRef: MutableRefObject<HTMLElement | undefined>,\n) => {\n const [isVisible, setIsVisible] = useState(false)\n const isVisibleRef = useRef(isVisible)\n // the ref is just to prevent most updates on init - charts are not visible on first intersection\n // observer callback, but it still tries to set the state. UseState does not bail out when\n // state doesn't change\n\n useEffect(() => {\n if (typeof IntersectionObserver === \"function\") {\n globalIntersectionObserver.subscribe(\n element,\n (newIsVisible) => {\n if (isVisibleRef.current !== newIsVisible) {\n if (clonedChildrenRef.current) {\n // eslint-disable-next-line no-param-reassign\n clonedChildrenRef.current.style.visibility = newIsVisible ? \"visible\" : \"hidden\"\n }\n\n isVisibleRef.current = newIsVisible\n // we need to mirror it in `use-state` to cause react update\n setIsVisible(newIsVisible)\n }\n },\n )\n }\n return () => {\n globalIntersectionObserver.unsubscribe(element)\n }\n }, [clonedChildrenRef, element])\n\n return isVisible\n}\n","import React from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\n\ninterface Props {\n attributes: Attributes\n}\n\n// rendered on init (for example when chart is not visible)\n// and when it's rendering after being hidden previously\nexport const InvisibleSearchableText = ({\n attributes,\n}: Props) => (\n <span style={{ position: \"absolute\", opacity: 0, width: 0 }}>\n {attributes.id}\n </span>\n)\n","import React, {\n useEffect, useLayoutEffect, useState, useRef,\n} from \"react\"\nimport { useDebounce } from \"react-use\"\nimport { forEachObjIndexed } from \"ramda\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport { selectDestroyOnHide, selectIsAsyncOnScroll, selectAlarm } from \"domains/global/selectors\"\nimport { getPortalNodeStyles } from \"domains/chart/utils/get-portal-node-styles\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { chartLibrariesSettings } from \"domains/chart/utils/chartLibrariesSettings\"\nimport { useCommonIntersection } from \"hooks/use-common-intersection\"\n\nimport { clearChartStateAction } from \"../actions\"\n\nimport { InvisibleSearchableText } from \"./invisible-searchable-text\"\n\nconst SCROLL_DEBOUNCE_ASYNC = 750\nconst SCROLL_DEBOUNCE_SYNC = 100\n\nconst cloneWithCanvas = (element: HTMLElement) => {\n const cloned = element.cloneNode(true) as HTMLElement\n const clonedCanvases = cloned.querySelectorAll(\"canvas\")\n\n element.querySelectorAll(\"canvas\")\n .forEach((oldCanvas, index) => {\n const newCanvas = clonedCanvases[index]\n const context = newCanvas.getContext(\"2d\")\n\n newCanvas.width = oldCanvas.width\n newCanvas.height = oldCanvas.height\n\n if (context) {\n context.drawImage(oldCanvas, 0, 0)\n }\n })\n return cloned\n}\n\nconst shouldCleanChartStateAlways = localStorage.getItem(\"wipe-chart-state\")\n\ninterface Props {\n attributes: Attributes\n chartUuid: string\n children: any\n portalNode: HTMLElement\n}\nexport const DisableOutOfView = ({\n attributes,\n chartUuid,\n children,\n portalNode,\n}: Props) => {\n /* when unmounting, clear redux state for this chart */\n const dispatch = useDispatch()\n useEffect(() => { // eslint-disable-line arrow-body-style\n return () => {\n dispatch(clearChartStateAction({ id: chartUuid }))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n\n /* separate functionality - adding custom styles to portalNode */\n const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n const [hasPortalNodeBeenStyled, setHasPortalNodeBeenStyled] = useState<boolean>(false)\n const isShowingAlarmOnChart = useSelector(selectAlarm)?.chartId === attributes.id\n useLayoutEffect(() => {\n if (hasPortalNodeBeenStyled) {\n return\n }\n const shouldAddSpecialHeight = isShowingAlarmOnChart\n && attributes.chartLibrary === \"dygraph\"\n && chartSettings.hasLegend(attributes)\n const styles = getPortalNodeStyles(attributes, chartSettings, shouldAddSpecialHeight)\n forEachObjIndexed((value, styleName) => {\n if (value) {\n portalNode.style.setProperty(styleName, value)\n }\n }, styles)\n // eslint-disable-next-line no-param-reassign\n portalNode.className = chartSettings.containerClass(attributes)\n setHasPortalNodeBeenStyled(true)\n }, [attributes, chartSettings, hasPortalNodeBeenStyled, isShowingAlarmOnChart, portalNode,\n setHasPortalNodeBeenStyled ])\n /* end of \"adding custom styles to portalNode\" */\n\n\n const destroyOnHide = useSelector(selectDestroyOnHide)\n\n const clonedChildrenRef = useRef<HTMLElement>()\n const isVisibleIntersection = useCommonIntersection(portalNode, clonedChildrenRef)\n\n // todo hook to scroll (observe on visible items) instead of changes in intersectionRatio\n // because intersectinnRatio maxes out on 1.0 when element is fully visible\n const isAsyncOnScroll = useSelector(selectIsAsyncOnScroll)\n const debounceTime = isAsyncOnScroll ? SCROLL_DEBOUNCE_ASYNC : SCROLL_DEBOUNCE_SYNC\n\n // \"should hide because of debounced scroll handler\"\n const [shouldHideDebounced, setShouldHideDebounced] = useState(!isVisibleIntersection)\n useDebounce(\n () => {\n // start rendering, when intersectionRatio is not 0 and it hasn't changed for 1500 ms\n setShouldHideDebounced(!isVisibleIntersection)\n },\n debounceTime,\n [isVisibleIntersection],\n )\n const shouldHide = isVisibleIntersection ? shouldHideDebounced : true\n\n const previousIsVisibleIntersection = useRef(isVisibleIntersection)\n if (clonedChildrenRef.current\n && previousIsVisibleIntersection.current !== isVisibleIntersection\n ) {\n previousIsVisibleIntersection.current = isVisibleIntersection\n }\n\n useEffect(() => {\n if (!isPrintMode && shouldHide && shouldCleanChartStateAlways) {\n dispatch(clearChartStateAction({ id: chartUuid }))\n }\n }, [chartUuid, dispatch, shouldHide])\n\n\n if (isPrintMode) {\n // we should show everything in this case\n return children\n }\n\n if (shouldHide) {\n // todo perhaps loader should be added here to both scenarios\n if (destroyOnHide) {\n return (\n <InvisibleSearchableText attributes={attributes} />\n )\n }\n\n if (!clonedChildrenRef.current) {\n const newClonedChildren = Array.from(portalNode.children)\n .map((child) => cloneWithCanvas(child as HTMLElement))\n\n const clonedChildrenContainer = document.createElement(\"div\")\n clonedChildrenContainer.style.visibility = \"hidden\"\n\n newClonedChildren.forEach((child) => {\n clonedChildrenContainer.appendChild(child)\n })\n\n clonedChildrenRef.current = clonedChildrenContainer\n }\n\n return (\n <>\n <InvisibleSearchableText attributes={attributes} />\n <div\n ref={(nodeElement) => {\n if (nodeElement && clonedChildrenRef.current) {\n nodeElement.appendChild(clonedChildrenRef.current)\n }\n }}\n />\n </>\n )\n }\n\n if (!destroyOnHide && clonedChildrenRef.current) {\n clonedChildrenRef.current = undefined\n }\n\n return children\n}\n","import React from \"react\"\n\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { ChartMetadata } from \"../../chart-types\"\nimport { ChartWithLoader, RenderCustomElementForDygraph } from \"../chart-with-loader\"\nimport { DisableOutOfView } from \"../disable-out-of-view\"\nimport { DropdownMenu } from \"../chart-dropdown\"\n\nexport type Props = {\n attributes: Attributes\n // warning! this is not the same as chartId in old dashboard\n // here, the chartID must be unique across all agents\n chartUuid: string\n uuid?: string\n portalNode: HTMLElement\n chartMetadata?: ChartMetadata | undefined\n dropdownMenu?: DropdownMenu\n renderCustomElementForDygraph?: RenderCustomElementForDygraph\n onAttributesChange?: any\n}\n\nexport const ChartContainer = ({\n attributes,\n chartMetadata,\n chartUuid,\n dropdownMenu,\n portalNode,\n renderCustomElementForDygraph,\n onAttributesChange,\n uuid,\n}: Props) => (\n <DisableOutOfView attributes={attributes} portalNode={portalNode} chartUuid={chartUuid}>\n <ChartWithLoader\n attributes={attributes}\n chartUuid={chartUuid}\n renderCustomElementForDygraph={renderCustomElementForDygraph}\n onAttributesChange={onAttributesChange}\n dropdownMenu={dropdownMenu}\n externalChartMetadata={chartMetadata}\n portalNode={portalNode}\n uuid={uuid}\n />\n </DisableOutOfView>\n)\n","/* eslint-disable max-len */\nimport { ChartsMetadata } from \"domains/global/types\"\nimport { AnyStringKeyT } from \"types/common\"\nimport { ChartEnriched } from \"domains/chart/chart-types\"\n\nexport interface Submenus {\n [submenus: string]: {\n charts: ChartEnriched[]\n height: number\n info: string | null\n priority: number\n title: string | null\n }\n}\n\nexport interface CorrelationMetadata {\n scoredCount?: number\n totalCount?: number\n averageScore?: number\n}\n\nexport interface Menu {\n // eslint-disable-next-line camelcase\n menu_pattern: string\n priority: number\n submenus: Submenus\n title: string\n icon: string\n info: string\n height: number\n correlationsMetadata?: CorrelationMetadata\n}\n\nexport interface Menus {\n [menu: string]: Menu\n}\n\nexport const options = {\n menus: {} as Menus,\n submenu_names: {} as {[family: string]: string},\n data: null as (ChartsMetadata | null),\n hostname: \"netdata_server\", // will be overwritten by the netdata server\n version: \"unknown\",\n release_channel: \"unknown\",\n hosts: [],\n\n duration: 0, // the default duration of the charts\n update_every: 1,\n\n chartsPerRow: 0,\n // chartsMinWidth: 1450,\n chartsHeight: 180,\n}\n\n\n// netdata standard information\nexport const netdataDashboard = {\n sparklines_registry: {} as {[key: string]: { count: number }},\n os: \"unknown\",\n\n menu: {},\n submenu: {} as {\n [family: string]: {\n info?: string | ((os: string) => string)\n title?: string\n }\n },\n context: {} as {\n [id: string]: {\n valueRange: string // examples: \"[0, 100]\", \"[null, null]\"\n height: number\n decimalDigits: number\n }},\n\n // generate a sparkline\n // used in the documentation\n sparkline(\n prefix: string, chart: string, dimension: string, units: string = \"\", suffix: string,\n ) {\n if (options.data === null || typeof options.data.charts === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart] === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart].dimensions === \"undefined\") {\n return \"\"\n }\n\n if (typeof options.data.charts[chart].dimensions[dimension] === \"undefined\") {\n return \"\"\n }\n\n let key = `${chart}.${dimension}`\n\n if (typeof this.sparklines_registry[key] === \"undefined\") {\n this.sparklines_registry[key] = { count: 1 }\n } else {\n this.sparklines_registry[key].count += 1\n }\n\n key = `${key}.${this.sparklines_registry[key].count}`\n\n return `${prefix}<div class=\"netdata-container\" data-netdata=\"${chart}\" data-after=\"-120\"\n data-width=\"25%\" data-height=\"15px\" data-chart-library=\"dygraph\"\n data-dygraph-theme=\"sparkline\" data-dimensions=\"${dimension}\"\n data-show-value-of-${dimension}-at=\"${key}\"></div>\n (<span id=\"${key}\" style=\"display: inline-block; min-width: 50px; text-align: right;\">\n X</span>${units})${suffix}`\n },\n\n gaugeChart(\n title: string, width: string, dimensions: string = \"\", colors: string = \"\",\n ) {\n return `${\"<div class=\\\"netdata-container\\\" data-netdata=\\\"CHART_UNIQUE_ID\\\"\"\n + \" data-dimensions=\\\"\"}${dimensions}\"`\n + \" data-chart-library=\\\"gauge\\\"\"\n + \" data-gauge-adjust=\\\"width\\\"\"\n + ` data-title=\"${title}\"`\n + ` data-width=\"${width}\"`\n + \" data-before=\\\"0\\\"\"\n + \" data-after=\\\"-CHART_DURATION\\\"\"\n + \" data-points=\\\"CHART_DURATION\\\"\"\n + ` data-colors=\"${colors}\"`\n + \" role=\\\"application\\\"></div>\"\n },\n\n anyAttribute(obj: AnyStringKeyT, attr: string, key: string, def: unknown) {\n if (typeof (obj[key]) !== \"undefined\") {\n const x = obj[key][attr]\n\n if (typeof (x) === \"undefined\") {\n return def\n }\n\n if (typeof (x) === \"function\") {\n return x(netdataDashboard.os)\n }\n\n return x\n }\n\n return def\n },\n\n menuTitle(chart: ChartEnriched) {\n if (chart.sectionTitle) {\n return chart.sectionTitle\n }\n if (typeof chart.menu_pattern !== \"undefined\") {\n const type = chart.type || chart.id.split(\".\")[0]\n return (`${this.anyAttribute(this.menu, \"title\", chart.menu_pattern, chart.menu_pattern)\n .toString()\n } ${type.slice(-(type.length - chart.menu_pattern.length - 1)).toString()}`)\n .replace(/_/g, \" \")\n }\n\n return (this.anyAttribute(this.menu, \"title\", chart.menu, chart.menu)).toString()\n .replace(/_/g, \" \")\n },\n\n menuIcon(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"icon\", chart.menu_pattern,\n \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\").toString()\n }\n\n return this.anyAttribute(this.menu, \"icon\", chart.menu, \"<i class=\\\"fas fa-puzzle-piece\\\"></i>\")\n },\n\n menuInfo(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"info\", chart.menu_pattern, null)\n }\n\n return this.anyAttribute(this.menu, \"info\", chart.menu, null)\n },\n\n menuHeight(chart: ChartEnriched) {\n if (typeof chart.menu_pattern !== \"undefined\") {\n return this.anyAttribute(this.menu, \"height\", chart.menu_pattern, 1.0)\n }\n\n return this.anyAttribute(this.menu, \"height\", chart.menu, 1.0)\n },\n\n submenuTitle(menu: string, submenu: string) {\n const key = `${menu}.${submenu}`\n // console.log(key);\n const title = this.anyAttribute(this.submenu, \"title\", key, submenu)\n .toString().replace(/_/g, \" \") as string\n if (title.length > 28) {\n const a = title.substring(0, 13)\n const b = title.substring(title.length - 12, title.length)\n return `${a}...${b}`\n }\n return title\n },\n\n submenuInfo(menu: string, submenu: string) {\n const key = `${menu}.${submenu}`\n return this.anyAttribute(this.submenu, \"info\", key, null) as (string | null)\n },\n\n submenuHeight(menu: string, submenu: string, relative: number) {\n const key = `${menu}.${submenu}`\n return this.anyAttribute(this.submenu, \"height\", key, 1.0) * relative\n },\n\n contextInfo(id: string) {\n const x = this.anyAttribute(this.context, \"info\", id, null)\n\n if (x !== null) {\n return `<div class=\"shorten dashboard-context-info\"\n role=\"document\">${x}</div>`\n }\n return \"\"\n },\n\n contextValueRange(id: string) {\n if (typeof this.context[id] !== \"undefined\"\n && typeof this.context[id].valueRange !== \"undefined\"\n ) {\n try {\n return JSON.parse(this.context[id].valueRange)\n } catch (e) {\n return [null, null]\n }\n }\n return [null, null]\n },\n\n contextHeight(id: string, def: number) {\n if (typeof this.context[id] !== \"undefined\" && typeof this.context[id].height !== \"undefined\") {\n return def * this.context[id].height\n }\n return def\n },\n\n contextDecimalDigits(id: string, def: number) {\n if (typeof this.context[id] !== \"undefined\"\n && typeof this.context[id].decimalDigits !== \"undefined\"\n ) {\n return this.context[id].decimalDigits\n }\n return def\n },\n}\n\n// @ts-ignore\nwindow.netdataDashboard = netdataDashboard\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/destructuring-assignment */\n/* eslint-disable operator-linebreak */\n/* eslint-disable arrow-body-style */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { useFormatters } from \"domains/chart/utils/formatters\"\nimport { netdataDashboard } from \"domains/dashboard/utils/netdata-dashboard\"\nimport { selectChartData } from \"domains/chart/selectors\"\n\nconst Title = styled(Text)`\n text-overflow: ellipsis;\n max-width: 120px;\n overflow-x: hidden;\n`\n\nconst getUnitSign = (unit) => {\n return unit === \"percentage\" ? \"%\" : ` ${unit.replace(/milliseconds/, \"ms\")}`\n}\n\nconst aggrMethods = {\n avg: \"Average\",\n sum: \"Sum\",\n min: \"Min\",\n max: \"Max\",\n}\nconst getAggregation = (value) => `${aggrMethods[value]}` || \"\"\n\nconst ChartValueContainer = memo(({ id, units, aggrMethod, displayedIndex }) => {\n const chartData = useSelector((state: AppStateT) => selectChartData(state, { id }))\n\n const value =\n typeof displayedIndex === \"number\"\n ? chartData.result[displayedIndex]\n : chartData.view_latest_values[0]\n\n const { legendFormatValue, unitsCurrent } = useFormatters({\n attributes: {},\n data: chartData,\n units,\n unitsCommon: null,\n unitsDesired: null,\n uuid: id,\n })\n\n const aggregation = getAggregation(aggrMethod)\n\n return (\n <Text\n wordBreak=\"keep-all\"\n color={[\"white\", \"pure\"]}\n margin={[0, 0, 0, \"auto\"]}\n data-testid=\"k8sPopoverChart-chartValue\"\n >\n {aggregation && (\n <Text\n margin={[0, 1, 0, 0]}\n color={[\"gray\", \"nepal\"]}\n data-testid=\"k8sPopoverChart-chartValue-aggr\"\n >\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={[\"white\", \"pure\"]} dangerouslySetInnerHTML={{ __html: icon }} />\n <Title color={[\"white\", \"pure\"]} data-testid=\"k8sPopoverChart-title\">\n {title}\n </Title>\n <ChartValue id={id} units={units} aggrMethod={aggrMethod} displayedIndex={displayedIndex} />\n </Flex>\n )\n}\n\nexport default memo(ChartOverview)\n","/* eslint-disable comma-dangle */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useRef, useContext, useLayoutEffect, useState, memo, useMemo } from \"react\"\nimport { throttle } from \"throttle-debounce\"\nimport { ChartContainer } from \"domains/chart/components/chart-container\"\nimport { ThemeContext } from \"styled-components\"\nimport { Flex, getColor } from \"@netdata/netdata-ui\"\nimport ChartOverview from \"./chartOverview\"\n\nconst Chart = ({ groupLabel, postGroupLabel, id, attributes, relatedIndex }) => {\n const theme = useContext(ThemeContext)\n const chartContainerRef = useRef()\n const [displayedIndex, setDisplayedIndex] = useState()\n const setDisplayedIndexThrottled = useMemo(() => throttle(400, setDisplayedIndex), [])\n const [, repaint] = useState()\n\n useLayoutEffect(() => {\n repaint(true)\n }, [])\n\n const { chartMetadata, attributes: relatedChartAttributes } = attributes.relatedCharts[\n relatedIndex\n ]\n\n const chartAttributes = useMemo(\n () => ({\n id: chartMetadata.id,\n\n width: \"100%\",\n height: \"60px\",\n\n chartLibrary: \"sparkline\",\n sparklineLineWidth: \"2px\",\n sparklineLineColor: getColor(\"border\")({ theme }),\n sparklineFillColor: getColor(\"disabled\")({ theme }),\n sparklineSpotRadius: 0,\n sparklineDisableTooltips: true,\n sparklineOnHover: (event) => setDisplayedIndexThrottled(event?.x),\n\n httpMethod: \"POST\",\n host: attributes.host,\n nodeIDs: attributes.nodeIDs,\n dimensions: relatedChartAttributes.dimensions,\n aggrMethod: relatedChartAttributes.aggrMethod,\n\n labels: {\n k8s_cluster_id: [chartMetadata.chartLabels.k8s_cluster_id[0]],\n [attributes.groupBy]: [groupLabel],\n ...(postGroupLabel && { [attributes.postGroupBy]: [postGroupLabel] }),\n },\n }),\n [chartMetadata, attributes]\n )\n\n return (\n <Flex gap={2} column data-testid=\"k8sPopoverChart\">\n <div\n ref={chartContainerRef}\n style={{ height: \"60px\", width: \"100%\" }}\n data-testid=\"k8sPopoverChart-container\"\n >\n {chartContainerRef.current && (\n <ChartContainer\n chartUuid={id}\n attributes={chartAttributes}\n chartMetadata={chartMetadata}\n portalNode={chartContainerRef.current}\n />\n )}\n </div>\n <ChartOverview\n id={id}\n aggrMethod={chartAttributes.aggrMethod}\n chartMetadata={chartMetadata}\n displayedIndex={displayedIndex}\n />\n </Flex>\n )\n}\n\nexport default memo(Chart)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport styled from \"styled-components\"\nimport { Text, Flex, Icon } from \"@netdata/netdata-ui\"\n\nconst ExternalButton = styled(Icon).attrs({\n margin: [0, 0, 0, \"auto\"],\n color: [\"white\", \"pure\"],\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\n name={icon}\n color={[\"white\", \"pure\"]}\n margin={[0, 1, 0, 0]}\n width=\"22px\"\n height=\"22px\"\n />\n </Flex>\n <Text color={[\"white\", \"pure\"]} data-testid=\"k8sPopoverItem-title\">\n {title}\n </Text>\n {secondary && (\n <Text color=\"border\" wordBreak=\"break-all\" data-testid=\"k8sPopoverItem-detail\">\n {secondary}\n </Text>\n )}\n {onClick && <ExternalButton onClick={onClick} />}\n </Flex>\n)\n\nexport default Item\n","/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { useDateTime } from \"utils/date-time\"\nimport Item from \"./item\"\nimport Section from \"./section\"\n\nconst DateItem = ({ date, title }) => {\n const { localeDateString, localeTimeString } = useDateTime()\n\n return (\n <Item\n icon=\"around_clock\"\n title={title}\n secondary={`${localeDateString(date)} | ${localeTimeString(date)}`}\n />\n )\n}\n\nconst DateSection = ({ before, after }) => (\n <Section title=\"Time\">\n <DateItem title=\"From\" date={after} />\n <DateItem title=\"To\" date={before} />\n </Section>\n)\n\nexport default DateSection\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Section from \"./section\"\nimport Chart from \"./chart\"\nimport DateSection from \"./dateSection\"\n\nconst Metrics = ({ groupLabel, postGroupLabel, attributes, viewAfter, viewBefore }) => (\n <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverMetrics\">\n <DateSection after={viewAfter} before={viewBefore} />\n <Section title=\"Metrics\" noBorder>\n <Flex gap={3} column data-testid=\"k8sPopoverMetrics-container\">\n {attributes.relatedCharts.map(({ chartMetadata }, index) => (\n <Chart\n key={chartMetadata.id}\n id={[groupLabel, postGroupLabel, attributes.id, chartMetadata.id].join(\"|\")}\n attributes={attributes}\n relatedIndex={index}\n groupLabel={groupLabel}\n postGroupLabel={postGroupLabel}\n />\n ))}\n </Flex>\n </Section>\n </Flex>\n)\n\nexport default Metrics\n","/* eslint-disable no-param-reassign */\n/* eslint-disable comma-dangle */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { memo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Item from \"./item\"\nimport Section from \"./section\"\nimport getLabel, { labelIds } from \"./getLabel\"\n\nconst LabelsSection = ({ labelId, items, onExpand, onItemClick, ...rest }) => {\n const { title, icon } = getLabel(labelId)\n const sliced = items.slice(0, 3)\n const expandable = items.length > 3\n\n const text = expandable ? `${title} (${items.length})` : title\n return (\n <Section title={text} onExpand={expandable && onExpand} {...rest}>\n {sliced.map((item) => (\n <Item\n key={item}\n icon={icon}\n title={item}\n onClick={onItemClick && (() => onItemClick(item))}\n />\n ))}\n </Section>\n )\n}\n\nconst getLabelIds = (chartLabels) => {\n chartLabels = { ...chartLabels }\n const predefinedLabelIds = labelIds.reduce((acc, labelId) => {\n if (!(labelId in chartLabels)) return acc\n\n delete chartLabels[labelId]\n return [...acc, labelId]\n }, [])\n\n return [...predefinedLabelIds, ...Object.keys(chartLabels)]\n}\n\nconst Context = ({ chartLabels, onExpand, onNodeClick }) => {\n const ids = getLabelIds(chartLabels)\n\n return (\n <Flex gap={3} column width=\"100%\" data-testid=\"k8sPopoverContext\">\n {ids.map((id, index) => (\n <LabelsSection\n key={id}\n labelId={id}\n items={chartLabels[id]}\n onExpand={() => onExpand(id)}\n noBorder={index === ids.length - 1}\n onItemClick={id === \"k8s_node_name\" && onNodeClick}\n />\n ))}\n </Flex>\n )\n}\n\nexport default memo(Context)\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React from \"react\"\nimport { Flex, Button, makeFlex } from \"@netdata/netdata-ui\"\nimport styled from \"styled-components\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Item from \"./item\"\nimport getLabel from \"./getLabel\"\n\nconst StyledButton = styled(makeFlex(Button)).attrs({\n flavour: \"borderless\",\n neutral: true,\n themeType: \"dark\",\n className: \"btn\",\n alignItems: \"start\",\n gap: 1,\n})`\n &&& {\n padding: 0;\n margin: 0;\n height: initial;\n width: initial;\n\n svg {\n height: 18px;\n width: 18px;\n position: initial;\n }\n }\n`\n\nconst List = ({ labelId, items, onBack, onItemClick }) => {\n const { title, icon } = getLabel(labelId)\n\n return (\n <Flex height=\"100%\" gap={3} data-testid=\"k8sPopoverList\" column>\n <Header>\n <StyledButton\n label={`${title} (${items.length})`}\n icon=\"chevron_left\"\n onClick={onBack}\n data-testid=\"k8sPopoverList-back\"\n />\n </Header>\n <Separator />\n <Flex\n gap={3}\n overflow={{ vertical: \"auto\", horizontal: \"hidden\" }}\n column\n data-testid=\"k8sPopoverList-container\"\n >\n {items.map((item) => (\n <Item\n key={item}\n icon={icon}\n title={item}\n onClick={onItemClick && (() => onItemClick(item))}\n />\n ))}\n </Flex>\n </Flex>\n )\n}\n\nexport default List\n","/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-props-no-spreading */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useState } from \"react\"\nimport { Flex, DropContainer } from \"@netdata/netdata-ui\"\nimport Separator from \"./separator\"\nimport Header from \"./header\"\nimport Tabs from \"./tabs\"\nimport Metrics from \"./metrics\"\nimport Context from \"./context\"\nimport List from \"./list\"\n\nconst Container = (props) => (\n <DropContainer\n background={[\"transparent\", \"popover\"]}\n padding={[2, 4]}\n width=\"322px\"\n height=\"422px\"\n {...props}\n />\n)\n\nconst TabsContainer = ({ label, value, onChange, children }) => (\n <Flex height=\"100%\" column>\n <Header>{label}</Header>\n <Tabs value={value} onChange={onChange} margin={[4, 0, 0, 0]} />\n <Separator />\n <Flex gap={3} overflow={{ vertical: \"auto\", horizontal: \"hidden\" }} margin={[4, 0, 0, 0]}>\n {children}\n </Flex>\n </Flex>\n)\n\nconst Popover = ({\n title,\n groupLabel,\n postGroupLabel,\n chartLabels,\n attributes,\n viewBefore,\n viewAfter,\n ...rest\n}) => {\n const [view, setView] = useState(\"context\")\n\n const isLabelView = view !== \"context\" && view !== \"metrics\"\n\n const { onNodeClick } = attributes\n\n return (\n <Container data-testid=\"k8sPopover\" {...rest}>\n {isLabelView && (\n <List\n labelId={view}\n items={chartLabels[view]}\n attributes={attributes}\n onBack={() => setView(\"context\")}\n onItemClick={view === \"k8s_node_name\" && onNodeClick}\n />\n )}\n {!isLabelView && (\n <TabsContainer label={title} value={view} onChange={setView}>\n {view === \"context\" && (\n <Context chartLabels={chartLabels} onExpand={setView} onNodeClick={onNodeClick} />\n )}\n {view === \"metrics\" && (\n <Metrics\n groupLabel={groupLabel}\n postGroupLabel={postGroupLabel}\n attributes={attributes}\n viewAfter={viewAfter}\n viewBefore={viewBefore}\n />\n )}\n </TabsContainer>\n )}\n </Container>\n )\n}\n\nexport default Popover\n","/* eslint-disable arrow-body-style */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\nimport React, { useMemo } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes.ts\"\nimport { ChartTimeframe } from \"domains/chart/components/chart-legend-bottom\"\nimport GroupBoxes from \"domains/chart/components/lib-charts/group-box-chart/groupBoxes\"\nimport Legend from \"domains/chart/components/lib-charts/group-box-chart/legend\"\nimport getLabel from \"./getLabel\"\nimport transform from \"./transform\"\nimport Popover from \"./popover\"\n\ninterface Props {\n chartData: any\n chartMetadata: ChartMetadata\n attributes: Attributes\n viewAfter: number\n viewBefore: number\n hoveredRow: number\n hoveredX: number | null\n showUndefined: boolean\n}\n\nconst Kubernetes = ({\n chartData,\n chartMetadata,\n attributes,\n viewAfter,\n viewBefore,\n hoveredRow,\n hoveredX,\n showUndefined,\n}: Props) => {\n const { filteredRows } = attributes\n const { data: groupBoxData, labels, chartLabels } = useMemo(\n () => transform(chartData, filteredRows),\n [filteredRows, chartData]\n )\n\n const {\n id,\n result: { data },\n groupBy,\n postGroupBy,\n } = chartData\n\n const renderBoxPopover = ({ groupIndex, index, align }) => {\n const label = groupBoxData[groupIndex].labels[index]\n const { title } = getLabel(postGroupBy)\n\n return (\n <Popover\n align={align}\n title={`${title}: ${label}`}\n groupLabel={labels[groupIndex]}\n postGroupLabel={label}\n chartLabels={groupBoxData[groupIndex].chartLabels[index]}\n attributes={attributes}\n viewBefore={viewBefore}\n viewAfter={viewAfter}\n />\n )\n }\n\n const renderGroupPopover = ({ groupIndex, align }) => {\n const label = labels[groupIndex]\n const { title } = getLabel(groupBy)\n\n return (\n <Popover\n align={align}\n title={`${title}: ${label}`}\n groupLabel={label}\n chartLabels={chartLabels[groupIndex]}\n attributes={attributes}\n viewBefore={viewBefore}\n viewAfter={viewAfter}\n />\n )\n }\n\n const groupedBoxesData = useMemo(() => {\n return groupBoxData.map((groupedBox) => {\n return {\n labels: groupedBox.labels,\n data:\n hoveredRow === -1 || hoveredRow > data.length || !(hoveredRow in data)\n ? groupedBox.postAggregated\n : groupedBox.indexes.map((index) => data[hoveredRow][index + 1]) || [],\n }\n })\n }, [data, groupBoxData, hoveredRow])\n\n return (\n <Flex column width=\"100%\" height=\"100%\" gap={4} padding={[4, 2]}>\n <GroupBoxes\n data={groupedBoxesData}\n labels={labels}\n renderBoxPopover={renderBoxPopover}\n renderGroupPopover={renderGroupPopover}\n />\n <Flex data-testid=\"legend-container\" justifyContent=\"between\">\n <Legend>{id}</Legend>\n <ChartTimeframe\n chartMetadata={chartMetadata}\n showUndefined={showUndefined}\n hoveredX={hoveredX}\n viewBefore={viewBefore}\n chartData={chartData}\n />\n </Flex>\n </Flex>\n )\n}\n\nexport default Kubernetes\n","/* eslint-disable arrow-body-style */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable comma-dangle */\n/* eslint-disable react/prop-types */\n// @ts-nocheck\n\nexport default (chartData, filteredRows) => {\n const { keys, labels: labelValues, groupBy, postGroupBy, aggrGroups, postAggregated } = chartData\n const groupValues = keys[groupBy]\n const postGroupValues = keys[postGroupBy]\n const indexes = filteredRows || [...Array(groupValues.length)].map((v, index) => index)\n\n const postGroupData = indexes.reduce((acc: any, index: number) => {\n const groupValue = groupValues[index]\n if (!(groupValue in acc)) {\n acc[groupValue] = {\n labels: [],\n indexes: [],\n chartLabels: [],\n postAggregated: [],\n }\n }\n const boxes = acc[groupValue]\n boxes.indexes.push(index)\n boxes.labels.push(postGroupValues[index])\n boxes.postAggregated.push(postAggregated[index])\n\n const chartLabels = aggrGroups.reduce((labelsAcc, label) => {\n return labelValues[label][index]\n ? { ...labelsAcc, [label]: labelValues[label][index] }\n : labelsAcc\n }, {})\n boxes.chartLabels.push(chartLabels)\n return acc\n }, {})\n\n const labels = Object.keys(postGroupData).sort(\n (a, b) => postGroupData[b].indexes.length - postGroupData[a].indexes.length\n )\n\n const groupData = labels.map((label) => postGroupData[label])\n\n const groupChartLabels = groupData.map((boxes) => {\n return aggrGroups.reduce((acc, label) => {\n const groupLabels = new Set(\n boxes.chartLabels.reduce((accChartLabels, chartLabels) => {\n return chartLabels[label] ? [...accChartLabels, ...chartLabels[label]] : accChartLabels\n }, [])\n )\n return groupLabels.size === 0 ? acc : { ...acc, [label]: Array.from(groupLabels) }\n }, {})\n })\n\n return { labels, data: groupData, chartLabels: groupChartLabels }\n}\n","import React, { useCallback } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { setGlobalChartUnderlayAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { selectSyncPanAndZoom } from \"domains/global/selectors\"\nimport { setChartPanAndZoomAction } from \"domains/chart/actions\"\nimport { useShowValueOutside } from \"hooks/use-show-value-outside\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport {\n ChartData, ChartMetadata, DygraphData, EasyPieChartData, D3pieChartData,\n} from \"../chart-types\"\nimport { chartLibrariesSettings, ChartLibraryName } from \"../utils/chartLibrariesSettings\"\n\nimport { DygraphChart } from \"./lib-charts/dygraph-chart\"\nimport { EasyPieChart } from \"./lib-charts/easy-pie-chart\"\nimport { GaugeChart } from \"./lib-charts/gauge-chart\"\nimport { SparklineChart } from \"./lib-charts/sparkline-chart\"\nimport { D3pieChart } from \"./lib-charts/d3pie-chart\"\nimport { PeityChart } from \"./lib-charts/peity-chart\"\nimport { GoogleChart } from \"./lib-charts/google-chart\"\nimport { TextOnly } from \"./lib-charts/text-only\"\nimport { KubernetesGroupBoxes } from \"./lib-charts/group-box-chart\"\n\ninterface Props {\n attributes: Attributes\n chartContainerElement: HTMLElement\n chartData: ChartData\n chartMetadata: ChartMetadata\n chartLibrary: ChartLibraryName\n colors: {\n [key: string]: string\n }\n chartUuid: string\n chartHeight: number\n chartWidth: number\n dimensionsVisibility: boolean[]\n hasEmptyData: boolean\n isRemotelyControlled: boolean\n legendFormatValue: ((v: number | string | null) => number | string)\n orderedColors: string[]\n hoveredX: number | null\n onUpdateChartPanAndZoom: (arg: { after: number, before: number, masterID: string }) => void\n immediatelyDispatchPanAndZoom: () => void\n\n hoveredRow: number\n setHoveredX: (hoveredX: number | null, noMaster?: boolean) => void\n setMinMax: (minMax: [number, number]) => void\n showLatestOnBlur: boolean\n unitsCurrent: string\n viewAfterForCurrentData: number,\n viewBeforeForCurrentData: number,\n}\n\nexport const AbstractChart = ({\n attributes,\n chartContainerElement,\n chartData,\n chartMetadata,\n chartLibrary,\n colors,\n chartUuid,\n chartHeight,\n chartWidth,\n dimensionsVisibility,\n hasEmptyData,\n isRemotelyControlled,\n legendFormatValue,\n orderedColors,\n hoveredRow,\n hoveredX,\n onUpdateChartPanAndZoom,\n immediatelyDispatchPanAndZoom,\n setHoveredX,\n setMinMax,\n showLatestOnBlur,\n unitsCurrent,\n viewAfterForCurrentData,\n viewBeforeForCurrentData,\n}: Props) => {\n const dispatch = useDispatch()\n\n const isSyncPanAndZoom = useSelector(selectSyncPanAndZoom)\n const setGlobalChartUnderlay = useCallback(({ after, before, masterID }) => {\n dispatch(setGlobalChartUnderlayAction({ after, before, masterID }))\n\n // freeze charts\n // don't send masterID, so no padding is applied\n if (isSyncPanAndZoom) {\n dispatch(setGlobalPanAndZoomAction({\n after: viewAfterForCurrentData,\n before: viewBeforeForCurrentData,\n }))\n } else {\n dispatch(setChartPanAndZoomAction({\n after: viewAfterForCurrentData,\n before: viewBeforeForCurrentData,\n id: chartUuid,\n }))\n }\n }, [chartUuid, dispatch, isSyncPanAndZoom, viewAfterForCurrentData, viewBeforeForCurrentData])\n\n const chartSettings = chartLibrariesSettings[chartLibrary]\n const { hasLegend } = chartSettings\n const chartElementClassName = hasLegend(attributes)\n ? classNames(\n `netdata-chart-with-legend-${attributes.legendPosition || \"right\"}`,\n `netdata-${chartLibrary}-chart-with-legend-right`,\n )\n : classNames(\n \"netdata-chart\",\n `netdata-${chartLibrary}-chart`,\n )\n const chartElementId = `${chartLibrary}-${chartUuid}-chart`\n const showUndefined = hoveredRow === -1 && !showLatestOnBlur\n\n useShowValueOutside({\n attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined,\n })\n\n if (chartLibrary === \"easypiechart\") {\n return (\n <EasyPieChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n chartWidth={chartWidth}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n // easyPieChart doesnt support resizing, so lets just create new one when\n // container size changes\n key={chartWidth}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n hoveredRow={hoveredRow}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"gauge\") {\n return (\n <GaugeChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n chartHeight={chartHeight}\n chartWidth={chartWidth}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setHoveredX={setHoveredX}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"sparkline\") {\n return (\n <SparklineChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n dimensionsVisibility={dimensionsVisibility}\n isRemotelyControlled={isRemotelyControlled}\n orderedColors={orderedColors}\n unitsCurrent={unitsCurrent}\n viewAfterForCurrentData={viewAfterForCurrentData}\n viewBeforeForCurrentData={viewBeforeForCurrentData}\n />\n )\n }\n\n if (chartLibrary === \"d3pie\") {\n return (\n <D3pieChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as D3pieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n dimensionsVisibility={dimensionsVisibility}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n isRemotelyControlled={isRemotelyControlled}\n legendFormatValue={legendFormatValue}\n orderedColors={orderedColors}\n setMinMax={setMinMax}\n showUndefined={showUndefined}\n unitsCurrent={unitsCurrent}\n />\n )\n }\n\n if (chartLibrary === \"peity\") {\n return (\n <PeityChart\n attributes={attributes}\n chartContainerElement={chartContainerElement}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n orderedColors={orderedColors}\n />\n )\n }\n\n if (chartLibrary === \"google\") {\n return (\n <GoogleChart\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n orderedColors={orderedColors}\n unitsCurrent={unitsCurrent}\n />\n )\n }\n\n if (chartLibrary === \"textonly\") {\n return (\n <TextOnly\n attributes={attributes}\n chartData={chartData as EasyPieChartData}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n />\n )\n }\n\n if (chartLibrary === \"groupbox\") {\n return (\n <KubernetesGroupBoxes\n chartData={chartData}\n chartMetadata={chartMetadata}\n attributes={attributes}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n showUndefined={showUndefined}\n />\n )\n }\n\n return (\n <DygraphChart\n attributes={attributes}\n chartData={chartData as DygraphData}\n chartMetadata={chartMetadata}\n chartElementClassName={chartElementClassName}\n chartElementId={chartElementId}\n chartLibrary={chartLibrary}\n colors={colors}\n chartUuid={chartUuid}\n dimensionsVisibility={dimensionsVisibility}\n hasEmptyData={hasEmptyData}\n hasLegend={hasLegend(attributes)}\n isRemotelyControlled={isRemotelyControlled}\n orderedColors={orderedColors}\n immediatelyDispatchPanAndZoom={immediatelyDispatchPanAndZoom}\n hoveredRow={hoveredRow}\n hoveredX={hoveredX}\n onUpdateChartPanAndZoom={onUpdateChartPanAndZoom}\n setGlobalChartUnderlay={setGlobalChartUnderlay}\n setHoveredX={setHoveredX}\n setMinMax={setMinMax}\n unitsCurrent={unitsCurrent}\n viewAfter={viewAfterForCurrentData}\n viewBefore={viewBeforeForCurrentData}\n />\n )\n}\n","import { useEffect, useRef } from \"react\"\nimport { isEmpty } from \"ramda\"\nimport { useMount } from \"react-use\"\n\nimport { ChartData, DygraphData } from \"domains/chart/chart-types\"\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartLibraryConfig } from \"domains/chart/utils/chartLibrariesSettings\"\n\n\ninterface UseShowValueOutsideArgument {\n attributes: Attributes\n chartData: ChartData\n chartSettings: ChartLibraryConfig\n hoveredRow: number\n legendFormatValue: ((v: number | string | null) => number | string)\n showUndefined: boolean\n}\n\n// example of the attribute:\n// show-value-of-iowait-at: \"system.cpu.iowait.1\"\n\nexport const useShowValueOutside = ({\n attributes,\n chartData,\n chartSettings,\n hoveredRow,\n legendFormatValue,\n showUndefined,\n}: UseShowValueOutsideArgument) => {\n // a ref to store found elements, just once per lifetime of component\n const showValueAttributesNodes = useRef<(HTMLElement | null)[]>([])\n\n // find the nodes that will have populated values\n useMount(() => {\n const { showValueOf } = attributes\n // showValueOf will be undefined if not used, but additional isEmpty check can prevent\n // regression performance issue in the future\n if (!showValueOf || isEmpty(showValueOf)) {\n return\n }\n const dimensionNames = chartData.dimension_names\n const dimensionIds = chartData.dimension_ids\n dimensionNames.forEach((dimensionName, i) => {\n const userElementId = showValueOf[`show-value-of-${dimensionName.toLowerCase()}`]\n || showValueOf[`show-value-of-${dimensionIds[i].toLowerCase()}-at`]\n\n // if element is not found, just add null\n showValueAttributesNodes.current = showValueAttributesNodes.current.concat(\n document.getElementById(userElementId),\n )\n })\n })\n\n useEffect(() => {\n if (showValueAttributesNodes.current.length) {\n const chartSettingCallOptions = chartSettings.options(attributes)\n const isFlipped = chartSettingCallOptions.includes(\"flip\")\n\n // \"objectrows\" is for d3pie, which has different data format\n if (chartData.format === \"json\" && !chartSettingCallOptions.includes(\"objectrows\")) {\n const { data } = (chartData as DygraphData).result\n const valueIndex = hoveredRow === -1\n ? (data.length - 1)\n : (hoveredRow) // because data for easy-pie-chart are flipped\n\n // yes, \"flipped\" value means chronological order (from oldest to newest) :)\n const rowIndex = isFlipped ? valueIndex : (data.length - valueIndex - 1)\n const row = data[rowIndex]\n\n chartData.dimension_names.forEach((dimensionName, dimensionIndex) => {\n const value = (showUndefined || !row)\n ? \"\"\n : legendFormatValue(row[dimensionIndex + 1])\n const element = showValueAttributesNodes.current[dimensionIndex]\n if (element) {\n element.innerText = `${value}`\n }\n })\n }\n }\n }, [attributes, chartData, chartSettings, hoveredRow, legendFormatValue, showUndefined])\n}\n","import { __, prop } from \"ramda\"\nimport React, {\n useEffect, useState, useCallback, useMemo, memo, useContext,\n} from \"react\"\nimport { ThemeContext } from \"styled-components\"\nimport { useDebouncedCallback } from \"use-debounce\"\n\nimport {\n requestCommonColorsAction,\n resetGlobalPanAndZoomAction,\n setDefaultAfterAction,\n resetDefaultAfterAction,\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 { resetChartPanAndZoomAction, 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 attributes,\n attributes: {\n chartLibrary,\n },\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(() => chartData.dimension_names.map(\n (dimensionName) => (selectedDimensions.length === 0\n ? true\n : selectedDimensions.includes(dimensionName)),\n ),\n [chartData.dimension_names, selectedDimensions])\n\n\n const shouldDisplayToolbox = hasLegend(attributes)\n && window.NETDATA.options.current.legend_toolbox\n\n const shouldDisplayResizeHandler = 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 () => {\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 },\n [chartData.dimension_names, chartMetadata.dimensions],\n )\n useEffect(() => {\n dispatch(requestCommonColorsAction({\n chartContext: chartMetadata.context,\n chartUuid,\n colorsAttribute: attributes.colors,\n commonColorsAttribute: attributes.commonColors,\n dimensionNames: allDimensionNames,\n }))\n }, [allDimensionNames, attributes.colors, attributes.commonColors, chartMetadata.context,\n chartUuid, dispatch])\n\n const {\n legendFormatValue,\n legendFormatValueDecimalsFromMinMax,\n unitsCurrent,\n } = 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((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 }, [chartUuid, dispatch, isSyncSelection])\n const globalHoveredX = useSelector(selectGlobalSelection)\n const hoveredX = isSyncSelection\n ? globalHoveredX\n : 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 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 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\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 && movement <= tolerance && 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(setChartPanAndZoomAction({\n after: afterForced,\n before: beforeForced,\n id: chartUuid,\n shouldForceTimeRange,\n }))\n }\n\n if (doCallback && typeof callback === \"function\") {\n callback(afterForced, beforeForced)\n }\n }, [chartData.view_update_every, chartUuid, dispatch, fixedMinDuration, isSyncPanAndZoom,\n netdataFirst, netdataLast, setGlobalPanAndZoomDebounced, viewAfter, viewBefore])\n\n /**\n * toolbox handlers\n */\n const handleToolBoxPanAndZoom = useCallback((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 }, [handleUpdateChartPanAndZoom, netdataFirst, netdataLast])\n\n const handleToolboxLeftClick = useCallback((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 }, [handleToolBoxPanAndZoom, netdataFirst, viewAfter, viewBefore])\n\n const handleToolboxRightClick = useCallback((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 }, [handleToolBoxPanAndZoom, netdataLast, viewAfter, viewBefore])\n\n const handleToolboxZoomInClick = useCallback((event: React.MouseEvent) => {\n const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n if (!globalPanAndZoom) {\n dispatch(setDefaultAfterAction({\n after: Math.round(defaultAfter / (panAndZoomStep + 1)),\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 }, [defaultAfter, dispatch, globalPanAndZoom, handleToolBoxPanAndZoom, netdataFirst, netdataLast,\n viewAfter, viewBefore])\n\n const handleToolboxZoomOutClick = useCallback((event: React.MouseEvent) => {\n const panAndZoomStep = getPanAndZoomStep(event) * 0.8\n if (!globalPanAndZoom) {\n dispatch(setDefaultAfterAction({\n after: Math.round(defaultAfter * (panAndZoomStep + 1)),\n }))\n return\n }\n const dt = ((viewBefore - viewAfter) / (1.0 - (panAndZoomStep * 0.8))\n - (viewBefore - viewAfter)) / 2\n const newAfter = viewAfter - dt\n const newBefore = viewBefore + dt\n handleToolBoxPanAndZoom(newAfter, newBefore)\n }, [defaultAfter, dispatch, globalPanAndZoom, handleToolBoxPanAndZoom, viewAfter, viewBefore])\n\n const handleToolboxResetClick = useCallback(() => {\n if (isSyncPanAndZoom) {\n if (globalPanAndZoom) {\n dispatch(resetGlobalPanAndZoomAction())\n } else {\n dispatch(resetDefaultAfterAction())\n }\n } else {\n dispatch(resetChartPanAndZoomAction({ id: chartUuid }))\n }\n }, [chartUuid, dispatch, globalPanAndZoom, isSyncPanAndZoom])\n\n /**\n * assign colors\n */\n const selectAssignedColors = useMemo(() => createSelectAssignedColors({\n chartContext: chartMetadata.context,\n chartUuid,\n colorsAttribute: attributes.colors,\n commonColorsAttribute: attributes.commonColors,\n }), [attributes.colors, attributes.commonColors, chartMetadata, chartUuid])\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 onToolboxResetClick={handleToolboxResetClick}\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 && (\n legendToolbox\n )}\n {!isLegendOnBottom && (\n resizeHandler\n )}\n </>\n )\n})\n","export const appHeaderHeight = \"56px\"\n\nexport const whitePure = [\"white\", \"pure\"]\n\nexport const redOrange = [\"red\", \"redOrange\"]\nexport const redOutrageousOrange = [\"red\", \"outrageousOrange\"]\nexport const redRoseWhite = [\"red\", \"roseWhite\"]\n\nexport const yellowSafron = [\"yellow\", \"safron\"]\nexport const yellowSafronMango = [\"yellow\", \"safronMango\"]\n\nexport const greenHaze = [\"green\", \"greenHaze\"]\nexport const greenMalachite = [\"green\", \"malachite\"]\nexport const greenClearDay = [\"green\", \"clearDay\"]\n\nexport const grayBombay = [\"gray\", \"bombay\"]\nexport const grayLimedSpruce = [\"gray\", \"limedSpruce\"]\nexport const graySilverSand = [\"gray\", \"silverSand\"]\nexport const grayGallery = [\"gray\", \"gallery\"]\n\nexport const dangerColor = [\"danger\"]\nexport const borderColor = [\"borderColor\"]\nexport const textColor = [\"text\"]\nexport const errorColor = [\"error\"]\nexport const successColor = [\"success\"]\nexport const warningColor = [\"warning\"]\n","import styled from \"styled-components\"\nimport {\n getColor, Icon,\n} from \"@netdata/netdata-ui\"\n\nimport { grayLimedSpruce, graySilverSand } from \"styles/layout-constants\"\n\nexport const DropdownItem = styled.div`\n display: flex;\n flex-direction: start;\n align-items: center;\n color: ${getColor(grayLimedSpruce)};\n white-space: nowrap;\n & > svg use {\n fill: ${getColor(grayLimedSpruce)};\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(grayLimedSpruce)};\n & :hover {\n fill: ${getColor(graySilverSand)};\n }\n }\n`\n","import React, { useState, ReactNode } from \"react\"\n\nimport { Attributes } from \"domains/chart/utils/transformDataAttributes\"\nimport { ChartMetadata } from \"domains/chart/chart-types\"\n\nimport { List, SimpleListItem } from \"@rmwc/list\"\nimport { MenuSurface, MenuSurfaceAnchor } from \"@rmwc/menu\"\n\nimport * as S from \"./styled\"\n\ninterface DropdownMenuCallbackProps {\n attributes: Attributes,\n chartMetadata: ChartMetadata,\n chartID: string,\n}\n\nexport type DropdownMenu = {\n icon: ReactNode,\n label: string,\n onClick: (dropdownMenuCallbackProps: DropdownMenuCallbackProps) => void,\n}[]\n\ninterface Props {\n attributes: Attributes\n chartID: string\n chartMetadata: ChartMetadata\n dropdownMenu: DropdownMenu\n}\n\nexport const ChartDropdown = ({\n attributes,\n chartID,\n chartMetadata,\n dropdownMenu,\n}: Props) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleClose = () => {\n setIsOpen(false)\n }\n\n return (\n <>\n <S.DotsBtn\n name=\"dots_2x3\"\n onClick={() => {\n setIsOpen(true)\n }}\n />\n <MenuSurfaceAnchor>\n <MenuSurface open={isOpen} onClose={handleClose}>\n <List>\n {dropdownMenu.map(({ icon, label, onClick }) => (\n <SimpleListItem\n key={label}\n text={(\n <S.DropdownItem>\n {icon}\n <S.DropdownItemLabel>\n {label}\n </S.DropdownItemLabel>\n </S.DropdownItem>\n )}\n onClick={() => {\n onClick({ attributes, chartMetadata, chartID })\n handleClose()\n }}\n />\n ))}\n </List>\n </MenuSurface>\n </MenuSurfaceAnchor>\n </>\n )\n}\n","import { prop } from \"ramda\"\nimport styled, { keyframes } from \"styled-components\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nconst circleAnimation = keyframes`\n 0% {\n opacity: .1;\n }\n 50% {\n opacity: .5;\n }\n 100% {\n opacity: .1;\n }\n`\n\n\nexport const SpinnerContainer = styled.div<{ top: number, right: number }>`\n position: absolute;\n top: ${prop(\"top\")}px;\n right: ${prop(\"right\")}px;\n display: flex;\n`\n\nexport const Circle = styled.div<{ size: number }>`\n width: ${prop(\"size\")}px;\n height: ${prop(\"size\")}px;\n background: ${getColor(\"border\")};\n border-radius: 50%;\n animation: 1s linear infinite both ${circleAnimation};\n`\n\nexport const Circle2 = styled(Circle)<{ spaceBetween: number }>`\n animation-delay: .3s; \n margin-left: ${prop(\"spaceBetween\")}px;\n`\n\nexport const Circle3 = styled(Circle)<{ spaceBetween: number }>`\n animation-delay: .6s; \n margin-left: ${prop(\"spaceBetween\")}px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\ninterface Props {\n chartLibrary: string\n}\nexport const ChartSpinner = ({\n chartLibrary,\n}: Props) => {\n const top = chartLibrary === \"dygraph\" ? 33 : 0\n const right = chartLibrary === \"dygraph\" ? 8 : 0\n const size = chartLibrary === \"dygraph\" ? 10 : 7\n const spaceBetween = chartLibrary === \"dygraph\" ? 4 : 2\n return (\n <S.SpinnerContainer top={top} right={right}>\n <S.Circle size={size} />\n <S.Circle2 size={size} spaceBetween={spaceBetween} />\n <S.Circle3 size={size} spaceBetween={spaceBetween} />\n </S.SpinnerContainer>\n )\n}\n","import styled from \"styled-components\"\n\nimport { chartDropdownZIndex } from \"styles/z-index\"\n\nexport const ChartDropdownContainer = styled.div`\n position: absolute;\n top: 0;\n left: 40px;\n width: 20px;\n height: 20px;\n z-index: ${chartDropdownZIndex};\n`\n","export const notificationsZIndex = \"z-index: 50;\"\n\nexport const chartDropdownZIndex = 10\n\nexport const spacesBarZIndex = 8\n\nexport const spacePanelZIndex = 6\n\nexport const appHeaderZIndex = 5\n\n// the same as in cloud\nexport const portalSidebarZIndex = \"z-index: 35;\"\nexport const customDropdownZIndex = \"z-index: 45;\"\nexport const dialogsZIndex = 60\n","import { cond, always, T } from \"ramda\"\nimport axios from \"axios\"\nimport React, { useEffect, useState, useMemo, useLayoutEffect } from \"react\"\nimport { useThrottle, useUpdateEffect, useUnmount, useDebounce } from \"react-use\"\n\nimport { AppStateT } from \"store/app-state\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\n\nimport {\n selectGlobalPanAndZoom,\n selectGlobalSelection,\n selectShouldEliminateZeroDimensions,\n selectPanAndZoomDataPadding,\n selectSnapshot,\n selectSpacePanelTransitionEndIsActive,\n selectDefaultAfter,\n} from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { CHART_UNMOUNTED } from \"utils/netdata-sdk\"\nimport { getCorrectedPoints } from \"utils/fill-missing-data\"\n\nimport { fallbackUpdateTimeInterval, panAndZoomDelay } from \"../../constants\"\nimport { getChartURLOptions } from \"../../utils/get-chart-url-options\"\nimport { chartLibrariesSettings } from \"../../utils/chartLibrariesSettings\"\nimport { Attributes } from \"../../utils/transformDataAttributes\"\nimport { getChartPixelsPerPoint } from \"../../utils/get-chart-pixels-per-point\"\nimport { useFetchNewDataClock } from \"../../hooks/use-fetch-new-data-clock\"\n\nimport { fetchChartAction, fetchDataAction } from \"../../actions\"\nimport {\n selectChartData,\n selectChartFetchDataParams,\n makeSelectChartMetadataRequest,\n selectChartPanAndZoom,\n selectChartIsFetchingData,\n selectChartViewRange,\n} from \"../../selectors\"\nimport {\n ChartData,\n ChartMetadata,\n D3pieChartData,\n DygraphData,\n EasyPieChartData,\n} from \"../../chart-types\"\n\nimport { Loader } from \"../loader\"\nimport { Chart } from \"../chart\"\nimport { ChartDropdown, DropdownMenu } from \"../chart-dropdown\"\nimport { ChartSpinner } from \"../chart-spinner/chart-spinner\"\n\nimport * as S from \"./styled\"\nimport \"./chart-with-loader.css\"\n\nexport type RenderCustomElementForDygraph = (selectedChartConfiguration: {\n attributes: Attributes\n onAttributesChange: any\n chartMetadata: ChartMetadata\n chartID: string\n chartData: ChartData | null\n}) => JSX.Element\n\nconst dimensionsAggrMethodMap = {\n \"sum-of-abs\": \"sum\",\n}\n\nconst emptyArray = [] as any\n\nexport type Props = {\n attributes: Attributes\n chartUuid: string\n uuid?: string\n dropdownMenu?: DropdownMenu\n externalChartMetadata?: ChartMetadata\n portalNode: HTMLElement\n renderCustomElementForDygraph?: RenderCustomElementForDygraph\n onAttributesChange?: any\n}\n\nexport const ChartWithLoader = ({\n attributes,\n chartUuid,\n uuid,\n dropdownMenu,\n externalChartMetadata,\n portalNode,\n renderCustomElementForDygraph,\n onAttributesChange,\n}: Props) => {\n /**\n * fetch chart details\n */\n const { host = serverDefault, id, nodeIDs } = attributes\n const dispatch = useDispatch()\n const selectChartMetadataRequest = useMemo(makeSelectChartMetadataRequest, [])\n const { chartMetadata, isFetchingDetails } = useSelector((state: AppStateT) =>\n selectChartMetadataRequest(state, { chartId: id, id: chartUuid })\n )\n const actualChartMetadata = externalChartMetadata || chartMetadata\n useEffect(() => {\n if (!chartMetadata && !isFetchingDetails && !externalChartMetadata) {\n dispatch(\n fetchChartAction.request({\n chart: id,\n id: chartUuid,\n host,\n nodeIDs,\n })\n )\n }\n }, [\n id,\n chartUuid,\n dispatch,\n host,\n isFetchingDetails,\n chartMetadata,\n externalChartMetadata,\n nodeIDs,\n uuid,\n ])\n\n // todo local state option\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const chartPanAndZoom = useSelector((state: AppStateT) =>\n selectChartPanAndZoom(state, { id: chartUuid })\n )\n const panAndZoom = chartPanAndZoom || globalPanAndZoom\n\n const isPanAndZoomMaster =\n (!!globalPanAndZoom && globalPanAndZoom.masterID === chartUuid) || Boolean(chartPanAndZoom)\n const shouldForceTimeRange = panAndZoom?.shouldForceTimeRange || false\n\n // (isRemotelyControlled === false) only during globalPanAndZoom, when chart is panAndZoomMaster\n // and when no toolbox is used at that time\n const isRemotelyControlled = !panAndZoom || !isPanAndZoomMaster || shouldForceTimeRange // used when zooming/shifting in toolbox\n\n const fetchDataParams = useSelector((state: AppStateT) =>\n selectChartFetchDataParams(state, { id: chartUuid })\n )\n const viewRange = useSelector((state: AppStateT) =>\n selectChartViewRange(state, { id: chartUuid })\n )\n const chartData = useSelector((state: AppStateT) => selectChartData(state, { id: chartUuid }))\n const isFetchingData = useSelector((state: AppStateT) =>\n selectChartIsFetchingData(state, { id: chartUuid })\n )\n\n const hoveredX = useSelector(selectGlobalSelection)\n\n // periodical update of newest data\n // default to 2000ms. When chartMetadata has been fetched, use chartMetadata.update_every\n // if chartData has been fetched, use chartData.view_update_every instead\n // todo add support to \"data-update-every\" attribute\n const viewUpdateEvery = cond([\n [always(!!chartData), () => (chartData as ChartData).view_update_every * 1000],\n [\n always(!!actualChartMetadata),\n () => (actualChartMetadata as ChartMetadata).update_every * 1000,\n ],\n [T, always(fallbackUpdateTimeInterval)],\n ])()\n const [shouldFetch, setShouldFetch] = useFetchNewDataClock({\n areCriteriaMet: !panAndZoom && !hoveredX,\n preferedIntervalTime: viewUpdateEvery,\n })\n\n const panAndZoomThrottled = useThrottle(panAndZoom, panAndZoomDelay)\n useEffect(() => {\n setShouldFetch(true)\n }, [panAndZoomThrottled, setShouldFetch])\n\n const defaultAfter = useSelector(selectDefaultAfter)\n // when after/before changes, don't wait for next interval, just fetch immediately\n useUpdateEffect(() => {\n setShouldFetch(true)\n }, [\n attributes.after,\n attributes.before,\n defaultAfter,\n attributes.dimensions,\n attributes.aggrMethod,\n attributes.groupBy,\n ])\n\n const { before: initialBefore = window.NETDATA.chartDefaults.before } = attributes\n\n // attributes.after should be now used only for old custom dashboard\n // and in the future for setting timeframe per-chart\n const liveModeAfter = attributes.after || defaultAfter\n\n const chartSettings = chartLibrariesSettings[attributes.chartLibrary]\n const { hasLegend } = chartSettings\n\n // todo optimize by using resizeObserver (optionally)\n const boundingClientRect = portalNode.getBoundingClientRect()\n\n // from old dashboard\n const chartWidth = boundingClientRect.width - (hasLegend(attributes) ? 140 : 0)\n const chartHeight = boundingClientRect.height\n\n const isShowingSnapshot = Boolean(useSelector(selectSnapshot))\n const shouldEliminateZeroDimensions =\n useSelector(selectShouldEliminateZeroDimensions) || isShowingSnapshot\n const shouldUsePanAndZoomPadding = useSelector(selectPanAndZoomDataPadding)\n\n const { CancelToken } = axios\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const cancelTokenSource = useMemo(() => CancelToken.source(), [])\n useUnmount(() => {\n cancelTokenSource.cancel(CHART_UNMOUNTED)\n })\n\n /**\n * spinner state\n * show spinner when it's fetching for more than 2 seconds\n * hide spinner immediately when it's not fetching\n */\n const [shouldShowSpinnerDebounced, setShouldShowSpinnerDebounced] = useState(false)\n const shouldShowSpinner = shouldShowSpinnerDebounced && isFetchingData\n useDebounce(\n () => {\n if (isFetchingData) {\n setShouldShowSpinnerDebounced(true)\n }\n },\n 2000,\n [isFetchingData]\n )\n useEffect(() => {\n if (!isFetchingData && shouldShowSpinnerDebounced) {\n setShouldShowSpinnerDebounced(false)\n }\n }, [isFetchingData, shouldShowSpinnerDebounced])\n\n /**\n * fetch data\n */\n useEffect(() => {\n if (shouldFetch && actualChartMetadata && !isFetchingData) {\n // todo can be overriden by main.js\n const forceDataPoints = window.NETDATA.options.force_data_points\n\n let after\n let before\n let newViewRange\n let pointsMultiplier = 1\n\n if (panAndZoom) {\n if (isPanAndZoomMaster) {\n after = Math.round(panAndZoom.after / 1000)\n before = Math.round(panAndZoom.before / 1000)\n\n newViewRange = [after, before]\n\n if (shouldUsePanAndZoomPadding) {\n const requestedPadding = Math.round((before - after) / 2)\n after -= requestedPadding\n before += requestedPadding\n pointsMultiplier = 2\n }\n } else {\n after = Math.round(panAndZoom.after / 1000)\n before = Math.round(panAndZoom.before / 1000)\n pointsMultiplier = 1\n }\n } else {\n // no panAndZoom\n before = initialBefore\n after = liveModeAfter\n pointsMultiplier = 1\n }\n\n newViewRange = (newViewRange || [after, before]).map(x => x * 1000) as [number, number]\n\n const dataPoints =\n attributes.points ||\n Math.round(chartWidth / getChartPixelsPerPoint({ attributes, chartSettings }))\n const points = forceDataPoints || dataPoints * pointsMultiplier\n\n const shouldForceTimeWindow = attributes.forceTimeWindow || Boolean(defaultAfter)\n // if we want to add fake points, we need first need to request less\n // to have the desired frequency\n // this will be removed when Agents will support forcing time-window between points\n const correctedPoints = shouldForceTimeWindow\n ? getCorrectedPoints({\n after,\n before,\n firstEntry: actualChartMetadata.first_entry,\n points,\n })\n : null\n\n const group = attributes.method || window.NETDATA.chartDefaults.method\n setShouldFetch(false)\n dispatch(\n fetchDataAction.request({\n // properties to be passed to API\n host,\n context: actualChartMetadata.context,\n chart: actualChartMetadata.id,\n format: chartSettings.format,\n points: correctedPoints || points,\n group,\n gtime: attributes.gtime || 0,\n options: getChartURLOptions(attributes, shouldEliminateZeroDimensions),\n after: after || null,\n before: before || null,\n dimensions: attributes.dimensions,\n labels: attributes.labels,\n postGroupBy: attributes.postGroupBy,\n postAggregationMethod: attributes.postAggregationMethod,\n aggrMethod: attributes.aggrMethod,\n aggrGroups: attributes.aggrGroups,\n // @ts-ignore\n dimensionsAggrMethod:\n dimensionsAggrMethodMap[attributes.dimensionsAggrMethod] ||\n attributes.dimensionsAggrMethod,\n nodeIDs,\n httpMethod: attributes.httpMethod,\n groupBy: attributes.groupBy,\n\n // properties for the reducer\n fetchDataParams: {\n // we store it here so it is only available when data is fetched\n // those params should be synced with data\n fillMissingPoints: correctedPoints ? points - correctedPoints : undefined,\n isRemotelyControlled,\n viewRange: newViewRange,\n },\n id: chartUuid,\n cancelTokenSource,\n })\n )\n }\n }, [\n attributes,\n actualChartMetadata,\n chartSettings,\n chartUuid,\n chartWidth,\n defaultAfter,\n dispatch,\n hasLegend,\n host,\n initialBefore,\n isFetchingData,\n isPanAndZoomMaster,\n isRemotelyControlled,\n liveModeAfter,\n panAndZoom,\n portalNode,\n setShouldFetch,\n shouldEliminateZeroDimensions,\n shouldUsePanAndZoomPadding,\n shouldFetch,\n cancelTokenSource,\n nodeIDs,\n uuid,\n ])\n\n useSelector(selectSpacePanelTransitionEndIsActive)\n\n const externalSelectedDimensions = attributes?.selectedDimensions\n const [selectedDimensions, setSelectedDimensions] = useState<string[]>(\n externalSelectedDimensions || emptyArray\n )\n\n useLayoutEffect(() => {\n if (externalSelectedDimensions) {\n setSelectedDimensions(externalSelectedDimensions)\n }\n }, [externalSelectedDimensions])\n\n useLayoutEffect(() => {\n setSelectedDimensions(externalSelectedDimensions || emptyArray)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [attributes?.groupBy])\n\n const customElementForDygraph = useMemo(\n () =>\n renderCustomElementForDygraph &&\n renderCustomElementForDygraph({\n onAttributesChange,\n attributes,\n chartMetadata: actualChartMetadata as ChartMetadata,\n chartData,\n chartID: id,\n }),\n [\n onAttributesChange,\n renderCustomElementForDygraph,\n attributes,\n id,\n actualChartMetadata,\n chartData,\n ]\n )\n\n // eslint-disable-next-line max-len\n const hasEmptyData =\n (chartData as DygraphData | D3pieChartData | null)?.result?.data?.length === 0 ||\n (chartData as EasyPieChartData | null)?.result?.length === 0\n\n if (!chartData || !actualChartMetadata) {\n return (\n <>\n <Loader\n // Loader should remount when that flag is changed, because inside\n // there's an oldschool bootstrap icon which doesn't handle updates well\n key={`${hasEmptyData}`}\n hasEmptyData={hasEmptyData}\n containerNode={portalNode}\n />\n {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n </>\n )\n }\n\n return (\n <>\n {hasEmptyData && (\n <Loader key={`${hasEmptyData}`} hasEmptyData={hasEmptyData} containerNode={portalNode} />\n )}\n <Chart\n attributes={attributes}\n chartContainerElement={portalNode}\n chartData={chartData}\n chartMetadata={actualChartMetadata}\n chartUuid={chartUuid}\n chartHeight={chartHeight}\n chartWidth={chartWidth}\n defaultAfter={defaultAfter}\n globalPanAndZoom={globalPanAndZoom}\n hasEmptyData={hasEmptyData}\n isRemotelyControlled={fetchDataParams.isRemotelyControlled}\n // view range that updates only when data is fetched\n viewRangeForCurrentData={fetchDataParams.viewRange}\n // view range that updates when requesting and fetching of data\n viewRange={viewRange!}\n selectedDimensions={selectedDimensions}\n setSelectedDimensions={setSelectedDimensions}\n showLatestOnBlur={!panAndZoom}\n />\n {shouldShowSpinner && <ChartSpinner chartLibrary={attributes.chartLibrary} />}\n {dropdownMenu && dropdownMenu.length > 0 && (\n <S.ChartDropdownContainer>\n <ChartDropdown\n dropdownMenu={dropdownMenu}\n chartID={id}\n attributes={attributes}\n chartMetadata={actualChartMetadata}\n />\n </S.ChartDropdownContainer>\n )}\n {customElementForDygraph}\n </>\n )\n}\n","import { useEffect, useState } from \"react\"\nimport { useInterval } from \"react-use\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectHasWindowFocus, selectStopUpdatesWhenFocusIsLost } from \"domains/global/selectors\"\nimport { BIGGEST_INTERVAL_NUMBER } from \"utils/biggest-interval-number\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\n\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 shouldBeUpdating = !(!hasWindowFocus && stopUpdatesWhenFocusIsLost)\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 = ((shouldBeUpdating || !shouldFetchImmediatelyAfterFocus) && !isPrintMode)\n ? preferedIntervalTime\n : BIGGEST_INTERVAL_NUMBER\n useInterval(() => {\n if (areCriteriaMet) {\n if (!shouldBeUpdating) {\n setShouldFetchImmediatelyAfterFocus(true)\n return\n }\n setShouldFetch(true)\n }\n // when there's no focus, don't ask for updated data\n }, intervalTime)\n return [shouldFetch, setShouldFetch]\n}\n","import { Attributes } from \"./transformDataAttributes\"\nimport { ChartLibraryConfig } from \"./chartLibrariesSettings\"\n\ntype GetChartPixelsPerPoint = (arg: {\n attributes: Attributes,\n chartSettings: ChartLibraryConfig,\n}) => number\n\nexport const getChartPixelsPerPoint: GetChartPixelsPerPoint = ({\n attributes, chartSettings,\n}) => {\n const {\n pixelsPerPoint: pixelsPerPointAttribute,\n } = attributes\n if (typeof pixelsPerPointAttribute === \"number\") {\n return pixelsPerPointAttribute\n }\n const pixelsPerPointSetting = chartSettings.pixelsPerPoint(attributes)\n\n return Math.max(...[\n pixelsPerPointSetting,\n window.NETDATA.options.current.pixels_per_point,\n ].filter((px) => typeof px === \"number\"))\n}\n","import { prop, pick } from \"ramda\"\nimport { createSelector } from \"reselect\"\n\nimport { AppStateT } from \"store/app-state\"\n\nimport { storeKey } from \"./constants\"\n\nconst selectDashboardDomain = (state: AppStateT) => state[storeKey]\n\nexport const selectIsSnapshotMode = createSelector(\n selectDashboardDomain,\n prop(\"isSnapshotMode\"),\n)\n\nexport const selectSnapshotOptions = createSelector(\n selectDashboardDomain,\n pick([\"snapshotCharts\", \"snapshotDataPoints\"]),\n)\n","import React, { useEffect } from \"react\"\n\nimport { MS_IN_SECOND } from \"utils/utils\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { selectIsSnapshotMode, selectSnapshotOptions } from \"domains/dashboard/selectors\"\nimport { selectGlobalPanAndZoom } from \"domains/global/selectors\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { TimeRangeObjT } from \"types/common\"\n\nimport { Attributes } from \"../utils/transformDataAttributes\"\nimport { fetchDataForSnapshotAction } from \"../actions\"\nimport { chartLibrariesSettings } from \"../utils/chartLibrariesSettings\"\nimport { getChartURLOptions } from \"../utils/get-chart-url-options\"\n\ninterface SnapshotLoaderProps {\n attributes: Attributes\n chartUuid: string\n}\nconst SnapshotLoader = ({\n attributes,\n chartUuid,\n}: SnapshotLoaderProps) => {\n const host = attributes.host || serverDefault\n const { snapshotDataPoints } = useSelector(selectSnapshotOptions)\n const group = attributes.method || window.NETDATA.chartDefaults.method\n const { chartLibrary } = attributes\n const chartSettings = chartLibrariesSettings[chartLibrary]\n\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const after = (globalPanAndZoom as TimeRangeObjT).after / MS_IN_SECOND\n const before = (globalPanAndZoom as TimeRangeObjT).before / MS_IN_SECOND\n\n const dispatch = useDispatch()\n useEffect(() => {\n dispatch(fetchDataForSnapshotAction.request({\n // properties to be passed to API\n host,\n context: attributes.id,\n chart: attributes.id,\n format: chartSettings.format,\n points: snapshotDataPoints as number,\n group,\n gtime: attributes.gtime || 0,\n // for snapshots, always eliminate zero dimensions\n options: getChartURLOptions(attributes, true),\n after: after || null,\n before: before || null,\n dimensions: attributes.dimensions,\n aggrMethod: attributes.aggrMethod,\n nodeIDs: attributes.nodeIDs,\n chartLibrary,\n id: chartUuid,\n groupBy: attributes.groupBy,\n }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }) // todo fetch based on state\n return null\n}\n\n\ninterface SnapshotLoaderContainerProps {\n attributes: Attributes\n chartUuid: string\n}\nexport const SnapshotLoaderContainer = ({\n attributes,\n chartUuid,\n}: SnapshotLoaderContainerProps) => {\n const isSnapshotMode = useSelector(selectIsSnapshotMode)\n if (!isSnapshotMode) {\n return null\n }\n return <SnapshotLoader attributes={attributes} chartUuid={chartUuid} />\n}\n","import React, { memo } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport { getAttributes } from \"../utils/transformDataAttributes\"\nimport { ChartWithLoader } from \"./chart-with-loader\"\nimport { DisableOutOfView } from \"./disable-out-of-view\"\nimport { SnapshotLoaderContainer } from \"./snapshot-loader\"\n\nconst getNodesArray = () => Array.from(document.querySelectorAll(\"[data-netdata]\"))\n\nexport const Portals = memo(() => {\n const nodes = getNodesArray()\n return (\n <>\n {nodes.map((node, index) => {\n const attributesMapped = getAttributes(node)\n const chartId = `${attributesMapped.id}-${index}`\n return (\n createPortal(\n <>\n <DisableOutOfView\n attributes={attributesMapped}\n chartUuid={chartId}\n portalNode={(node as HTMLElement)}\n >\n <ChartWithLoader\n attributes={attributesMapped}\n // todo change to uuid generator (when we disconnect dashboard.js)\n chartUuid={chartId}\n portalNode={(node as HTMLElement)}\n />\n </DisableOutOfView>\n <SnapshotLoaderContainer\n attributes={attributesMapped}\n chartUuid={chartId}\n />\n </>,\n node,\n )\n )\n })}\n </>\n )\n})\n","import { useEffect, useState } from \"react\"\n\nimport { axiosInstance } from \"utils/api\"\n\nexport const useHttp = <T = unknown>(\n url: string | undefined,\n shouldMakeCall : boolean = true,\n isExternal?: boolean,\n) => {\n const [isFetching, setIsFetching] = useState(false)\n const [isError, setIsError] = useState(false)\n const [data, setData] = useState<T | null>(null)\n useEffect(() => {\n if (shouldMakeCall && url) {\n const options = isExternal\n ? { headers: null, withCredentials: false }\n : {}\n\n setIsFetching(true)\n axiosInstance.get(url, options)\n .then((r) => {\n if (r.data) {\n setData(r.data)\n setIsError(false)\n setIsFetching(false)\n }\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.warn(`error fetching ${url}`, error)\n setIsError(true)\n setIsFetching(false)\n })\n }\n }, [isExternal, shouldMakeCall, url])\n // force triple instead of array\n return [data, isFetching, isError] as [T | null, boolean, boolean]\n}\n","import { ReactNode, useEffect, useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\nconst modalRoot = document.getElementById(\"modal-root\") as HTMLElement\n\ntype Props = {\n children: ReactNode\n}\nexport const ModalPortal = ({ children }: Props) => {\n const element = useRef(document.createElement(\"div\"))\n useEffect(() => {\n modalRoot.appendChild(element.current)\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n modalRoot.removeChild(element.current)\n }\n }, [])\n\n return createPortal(children, element.current)\n}\n","import React, { useRef, useEffect } from \"react\"\nimport classNames from \"classnames\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { ModalPortal } from \"domains/dashboard/components/modal-portal\"\nimport {\n selectAmountOfCharts, selectAmountOfFetchedCharts, selectNameOfAnyFetchingChart,\n} from \"domains/chart/selectors\"\n\nimport \"./print-modal.scss\"\n\nconst TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED = 1000\n\nexport const PrintModal = () => {\n const printModalElement = useRef<HTMLDivElement>(null)\n const isFetchingMetrics = true\n\n useEffect(() => {\n // todo replace bootstrap with newer solution (custom or react-compatible library)\n if (printModalElement.current) {\n const $element = window.$(printModalElement.current)\n $element.modal(\"show\")\n }\n }) // render just once\n\n const amountOfCharts = useSelector(selectAmountOfCharts)\n const amountOfFetchedCharts = useSelector(selectAmountOfFetchedCharts)\n const nameOfAnyFetchingChart = useSelector(selectNameOfAnyFetchingChart)\n\n const percentage = amountOfCharts === 0\n ? 0\n : (amountOfFetchedCharts / amountOfCharts) * 100\n\n useEffect(() => {\n if (percentage === 100) {\n setTimeout(() => {\n // in case browser will not be able to close the window\n window.$(printModalElement.current).modal(\"hide\")\n window.print()\n window.close()\n }, TIMEOUT_DURATION_TO_MAKE_SURE_ALL_CHARTS_HAVE_BEEN_RENDERED)\n }\n }, [percentage])\n\n\n const progressBarText = nameOfAnyFetchingChart\n && `${Math.round(percentage)}%, ${nameOfAnyFetchingChart}`\n\n\n return (\n <ModalPortal>\n <div\n ref={printModalElement}\n className=\"modal fade\"\n id=\"printModal\"\n tabIndex={-1}\n role=\"dialog\"\n aria-labelledby=\"printModalLabel\"\n data-keyboard=\"false\"\n data-backdrop=\"static\"\n >\n <div className=\"modal-dialog modal-lg\" role=\"document\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <button\n type=\"button\"\n className={classNames(\n \"close\",\n { \"print-modal__close-button--disabled\": isFetchingMetrics },\n )}\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n <h4 className=\"modal-title\" id=\"printModalLabel\">\n Preparing dashboard for printing...\n </h4>\n </div>\n <div className=\"modal-body\">\n Please wait while we initialize and render all the charts on the dashboard.\n <div\n className=\"progress progress-striped active\"\n style={{ height: \"2em\" }}\n >\n <div\n id=\"printModalProgressBar\"\n className=\"progress-bar progress-bar-info\"\n role=\"progressbar\"\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n style={{\n minWidth: \"2em\",\n width: `${percentage}%`,\n }}\n >\n <span\n id=\"printModalProgressBarText\"\n style={{\n paddingLeft: 10,\n paddingTop: 4,\n fontSize: \"1.2em\",\n textAlign: \"left\",\n width: \"100%\",\n position: \"absolute\",\n display: \"block\",\n color: \"black\",\n }}\n >\n {progressBarText}\n </span>\n </div>\n </div>\n The print dialog will appear as soon as we finish rendering the page.\n </div>\n <div className=\"modal-footer\" />\n </div>\n </div>\n </div>\n </ModalPortal>\n )\n}\n","import styled from \"styled-components\"\nimport { getSizeBy, getColor } from \"@netdata/netdata-ui\"\n\nexport const SocialMediaContainer = styled.div`\n width: 185px;\n padding: ${getSizeBy(2)};\n background: ${getColor(\"borderSecondary\")};\n\n font-size: 12px;\n margin-bottom: ${getSizeBy(3)};\n`\n\nexport const FirstRow = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nexport const GithubCopy = styled.div`\n\n`\n\nexport const GithubCopyLine = styled.div`\n\n`\n\nexport const SocialMediaLink = styled.a`\n &, &:hover {\n color: ${getColor(\"main\")};\n }\n`\n\nexport const GithubStarQuestion = styled(SocialMediaLink)``\n\nexport const GithubIcon = styled(SocialMediaLink)`\n font-size: 24px;\n`\n\nexport const TwitterIcon = styled(SocialMediaLink)`\n font-size: 17px;\n`\n\nexport const FacebookIcon = styled(SocialMediaLink)`\n font-size: 23px;\n`\n\nexport const Separator = styled.div`\n margin-top: ${getSizeBy(2)};\n border-top: 1px solid ${getColor(\"separator\")};\n\n`\nexport const SecondRow = styled.div`\n margin-top: ${getSizeBy(2)};\n display: flex;\n align-items: center;\n justify-content: space-between;\n`\n\nexport const SecondRowText = styled.span`\n font-size: 10px;\n`\n","import React from \"react\"\n\nimport * as S from \"./styled\"\n\nexport const SidebarSocialMedia = () => (\n <S.SocialMediaContainer>\n <S.FirstRow>\n <S.GithubCopy>\n <S.GithubCopyLine>\n Do you like Netdata?\n </S.GithubCopyLine>\n <S.GithubStarQuestion href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n Give us a star!\n </S.GithubStarQuestion>\n </S.GithubCopy>\n <S.GithubIcon href=\"https://github.com/netdata/netdata/\" target=\"_blank\">\n <i className=\"fab fa-github\" />\n </S.GithubIcon>\n </S.FirstRow>\n <S.Separator />\n <S.SecondRow>\n <S.SecondRowText>\n And share the word!\n </S.SecondRowText>\n <S.TwitterIcon href=\"https://twitter.com/linuxnetdata/\" target=\"_blank\">\n <i className=\"fab fa-twitter\" />\n </S.TwitterIcon>\n <S.FacebookIcon href=\"https://www.facebook.com/linuxnetdata/\" target=\"_blank\">\n <i className=\"fab fa-facebook\" />\n </S.FacebookIcon>\n </S.SecondRow>\n </S.SocialMediaContainer>\n)\n","import React, { useRef } from \"react\"\nimport { createPortal } from \"react-dom\"\n\ninterface Props {\n children: React.ReactNode\n}\nexport const SidebarSocialMediaPortal = ({\n children,\n}: Props) => {\n const element = useRef(document.querySelector(\"#sidebar-end-portal-container\"))\n return createPortal(children, element.current!)\n}\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { ToastContainer, ToastContainerProps } from \"react-toastify\"\nimport \"react-toastify/dist/ReactToastify.min.css\"\n\nimport { getColor } from \"@netdata/netdata-ui\"\n\nimport { notificationsZIndex } from \"styles/z-index\"\n\nconst WrappedToastContainer = ({\n className,\n ...rest\n}: ToastContainerProps & { className?: string }) => (\n <div className={className}>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <ToastContainer {...rest} closeButton={false} />\n </div>\n)\n\nexport const NotificationsContainer = styled(WrappedToastContainer)<ToastContainerProps>`\n .Toastify__toast-container {\n position: fixed;\n width: unset;\n min-width: 400px;\n max-width: 500px;\n ${notificationsZIndex};\n color: ${getColor(\"text\")};\n }\n .Toastify__toast {\n padding: 0;\n padding-top: 5px;\n }\n .Toastify__toast--error {\n background: ${getColor([\"red\", \"roseWhite\"])};\n border: 1px solid ${getColor(\"error\")};\n }\n .Toastify__toast--warning {\n }\n .Toastify__toast--success {\n background: ${getColor([\"green\", \"clearDay\"])};\n border: 1px solid ${getColor(\"success\")};\n }\n .Toastify__toast-body {\n }\n .Toastify__progress-bar {\n bottom: unset;\n top: 0;\n }\n .Toastify__progress-bar--success {\n background-color: ${getColor(\"success\")};\n }\n .Toastify__progress-bar--error {\n background-color: ${getColor(\"error\")};\n }\n`\n","import React from \"react\"\nimport { Icon, Flex } from \"@netdata/netdata-ui\"\n\nconst Item = ({ icon, children, hasBorder }) => (\n <Flex\n gap={2}\n border={hasBorder && { side: \"right\", color: \"separator\" }}\n alignItems=\"center\"\n padding={[0, 3, 0, 0]}\n height=\"100%\"\n >\n {!!icon && <Icon name={icon} color=\"bright\" height=\"15px\" />}\n {children}\n </Flex>\n)\n\nexport default Item\n","import React from \"react\"\nimport { Text } from \"@netdata/netdata-ui\"\nimport Item from \"../item\"\nimport { useSelector } from \"@/src/store/redux-separate-context\"\n\nconst hostNameSelector = state => {\n const snapshot = state.global.snapshot\n const data = state.global.chartsMetadata.data\n\n if (!snapshot && !data) return \"\"\n return snapshot ? snapshot.hostname : data.hostname\n}\n\nconst Node = () => {\n const hostname = useSelector(hostNameSelector)\n\n return (\n <Item icon=\"node_hollow\">\n <Text color=\"bright\" strong truncate>\n {hostname}\n </Text>\n </Item>\n )\n}\n\nexport default Node\n","import React from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\n\nconst Options = () => {\n return (\n <Flex gap={2}>\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#loadSnapshotModal\"\n icon=\"download\"\n title=\"Import a snapshot\"\n />\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#saveSnapshotModal\"\n icon=\"upload\"\n title=\"Export a snapshot\"\n />\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n data-toggle=\"modal\"\n data-target=\"#printPreflightModal\"\n icon=\"print\"\n title=\"Print dashboard\"\n />\n </Flex>\n )\n}\n\nexport default Options\n","import React from \"react\"\nimport { Button } from \"@netdata/netdata-ui\"\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: string) => data.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\n// eslint-disable-next-line camelcase\ninterface GithubResponse {\n tag_name: string\n}\nconst transformGithubResponse = (data: null | GithubResponse) =>\n // eslint-disable-next-line camelcase\n data?.tag_name.replace(/(\\r\\n|\\n|\\r| |\\t)/gm, \"\")\n\n// original function from main.js\nconst versionsMatch = (v1: string, v2: string) => {\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\ninterface Props {\n currentVersion: string\n releaseChannel: string\n}\nexport const VersionControl = ({ currentVersion, releaseChannel }: Props) => {\n const isStableReleaseChannel = releaseChannel === \"stable\"\n const [githubVersion] = useHttp<GithubResponse>(\n NETDATA_LATEST_VERSION_URL,\n isStableReleaseChannel,\n true\n )\n\n const [gcsVersionResponse] = useHttp<{ mediaLink: string }>(\n NETDATA_LATEST_GCS_VERSION_URL,\n !isStableReleaseChannel\n )\n const [mediaLinkResponse] = useHttp<string>(\n gcsVersionResponse?.mediaLink,\n Boolean(gcsVersionResponse)\n )\n\n // eslint-disable-next-line no-nested-ternary\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 <Button\n flavour=\"borderless\"\n themeType=\"dark\"\n small\n neutral={!isNewVersionAvailable}\n warning={isNewVersionAvailable}\n name={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n title={isNewVersionAvailable ? \"Need help?\" : \"Check Version\"}\n icon={isNewVersionAvailable ? \"update_pending\" : \"update\"}\n data-toggle=\"modal\"\n data-target=\"#updateModal\"\n />\n )\n}\n","import React from \"react\"\nimport { VersionControl } from \"components/app-header/components/version-control\"\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 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)<{ noMargin: boolean }>`\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 { DefaultTheme, DarkTheme } from \"@netdata/netdata-ui\"\n\nimport { DashboardTheme } from \"utils/map-theme\"\n\ninterface ThemeOptions {\n [index: string]: string\n}\n\nexport const themeOptions: { [index in DashboardTheme]: ThemeOptions } = {\n white: {\n background: DefaultTheme.colors.mainBackground,\n surface: DefaultTheme.colors.mainBackground,\n primary: DefaultTheme.colors.primary,\n secondary: DefaultTheme.colors.accent,\n error: DefaultTheme.colors.error,\n onPrimary: DefaultTheme.colors.bright,\n onSecondary: DefaultTheme.colors.bright,\n onSurface: DefaultTheme.colors.text,\n onError: DefaultTheme.colors.bright,\n dupaDupa: \"#ff00ff\",\n textPrimaryOnBackground: DefaultTheme.colors.text,\n textSecondaryOnBackground: DefaultTheme.colors.textFocus,\n textHintOnBackground: DefaultTheme.colors.text,\n textDisabledOnBackground: DefaultTheme.colors.disabled,\n textIconOnBackground: DefaultTheme.colors.text,\n textPrimaryOnLight: DarkTheme.colors.text,\n textSecondaryOnLight: DarkTheme.colors.textFocus,\n textHintOnLight: DarkTheme.colors.text,\n textDisabledOnLight: DarkTheme.colors.disabled,\n textIconOnLight: DarkTheme.colors.text,\n textPrimaryOnDark: DefaultTheme.colors.text,\n textSecondaryOnDark: DefaultTheme.colors.textFocus,\n textHintOnDark: DefaultTheme.colors.text,\n textDisabledOnDark: DefaultTheme.colors.disabled,\n textIconOnDark: DefaultTheme.colors.text,\n },\n slate: {\n background: DarkTheme.colors.mainBackground,\n surface: DarkTheme.colors.mainBackground,\n primary: DarkTheme.colors.primary,\n secondary: DarkTheme.colors.accent,\n error: DarkTheme.colors.error,\n onPrimary: DarkTheme.colors.bright,\n onSecondary: DarkTheme.colors.bright,\n onSurface: DarkTheme.colors.text,\n onError: DarkTheme.colors.bright,\n textPrimaryOnBackground: DarkTheme.colors.text,\n textSecondaryOnBackground: DarkTheme.colors.textFocus,\n textHintOnBackground: DarkTheme.colors.text,\n textDisabledOnBackground: DarkTheme.colors.disabled,\n textIconOnBackground: DarkTheme.colors.text,\n textPrimaryOnLight: DefaultTheme.colors.text,\n textSecondaryOnLight: DefaultTheme.colors.textFocus,\n textHintOnLight: DefaultTheme.colors.text,\n textDisabledOnLight: DefaultTheme.colors.disabled,\n textIconOnLight: DefaultTheme.colors.text,\n textPrimaryOnDark: DarkTheme.colors.text,\n textSecondaryOnDark: DarkTheme.colors.textFocus,\n textHintOnDark: DarkTheme.colors.text,\n textDisabledOnDark: DarkTheme.colors.disabled,\n textIconOnDark: DarkTheme.colors.text,\n },\n}\n","import { ThemeProvider } from \"@rmwc/theme\"\nimport React from \"react\"\nimport { themeOptions } from \"services/ui-service/ui-theming\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTheme } from \"domains/global/selectors\"\n\ninterface Props {\n children: React.ReactNode | React.ReactNode[]\n}\n\nexport const RMWCThemeProvider = ({ children }: Props) => {\n const theme = useSelector(selectTheme)\n return <ThemeProvider options={themeOptions[theme]}>{children}</ThemeProvider>\n}\n\nexport const withRMWCThemeProvider = (Component: any) => (props: any) => (\n <RMWCThemeProvider>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <Component {...props} />\n </RMWCThemeProvider>\n)\n","import styled from \"styled-components\"\n\nimport {\n getColor, getSizeBy, Text, Icon, PortalSidebar,\n} from \"@netdata/netdata-ui\"\n\nimport { dialogsZIndex, customDropdownZIndex, portalSidebarZIndex } from \"styles/z-index\"\n// todo move those components to netdata-ui to reuse them with the cloud\nimport { Dropdown } from \"components/mdx-components/dropdown\"\nimport { RMWCThemeProvider } from \"@/src/rmwc-theme-provider\"\n\n// todo fix \"any\"\nexport const StyledSidebar = (styled(PortalSidebar) as any).attrs(() => ({\n Wrapper: RMWCThemeProvider,\n}))`\n width: ${getSizeBy(83)};\n height: ${getSizeBy(51)};\n overflow: visible;\n top: ${getSizeBy(7)};\n ${portalSidebarZIndex}\n`\nexport const PickerBox = styled.div`\n display: flex;\n position: relative;\n min-width: ${getSizeBy(83)};\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`\nexport const HeaderSvg = styled.svg`\n fill: ${getColor(\"text\")};\n height: 14px;\n width: 14px;\n`\nexport const IconSpacer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding-right: ${getSizeBy()};\n`\n\nexport const PickerActionArea = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n justify-content: flex-end;\n`\nexport const PickerBtnArea = styled.div`\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: ${getSizeBy(2)};\n width: 100%;\n`\n\nexport const ShortPickHeader = styled.div`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: ${getSizeBy(2)};\n padding: ${getSizeBy(2)};\n color: ${getColor(\"text\")};\n font-weight: 700;\n line-height: 156px;\n height: 24px;\n margin-top: ${getSizeBy()};\n margin-bottom: ${getSizeBy()};\n margin-left: ${getSizeBy(2)};\n`\n\nexport const ShortPick = styled.div`\n display: flex;\n height: 100%;\n flex-direction: column;\n justify-content: center;\n align-items: flex-start;\n`\nexport const ShortPickElement = styled.div<{ isSelected?: boolean }>`\n display: flex;\n justify-content: flex-start;\n align-items: center;\n color: ${({ isSelected, theme }) => getColor(isSelected ? \"primary\" : \"text\")({ theme })};\n margin-left: ${getSizeBy(2)};\n margin-top: ${getSizeBy(2)};\n width: 187px;\n height: ${getSizeBy(2)};\n padding: ${getSizeBy(2)};\n cursor: pointer;\n &:hover {\n color: ${getColor(\"primary\")};\n }\n`\nexport const AccessorBox = styled.div`\n width: 100%;\n display: flex;\n justify-content: start;\n color: ${getColor(\"text\")};\n align-items: center;\n height: 40px;\n padding: 0 10px;\n box-sizing: border-box;\n white-space: nowrap;\n font-size: 12px;\n cursor: pointer;\n`\n\nexport const DropdownBox = styled.div`\n position: absolute;\n left: 32px;\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n padding: 0px;\n position: absolute;\n height: 32px;\n`\n\nexport const StyledDropdown = (styled(Dropdown) as any)`\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 margin-left: -16px;\n margin-top: ${getSizeBy(2)};\n width: ${getSizeBy(35)};\n background: ${getColor(\"mainBackground\")};\n ${customDropdownZIndex}\n }\n }\n`\nexport const TypeViewBox = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row nowrap;\n align-items: center;\n`\nexport const DropdownIcon = styled(Icon)`\n fill: ${getColor(\"text\")};\n width: 12px;\n height: 12px;\n`\nexport const TextBox = styled(Text)`\n flex: 1;\n padding-right: 15px;\n`\nexport const LastText = styled.div`\n font-weight: 700;\n font-size: 14px;\n line-height: 14px;\n`\nexport const CustomInput = styled.input`\n border: 1px solid ${getColor(\"border\")};\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 color: inherit; // needed for dashboard, in cloud it's default value\n &:focus {\n border: 1px solid ${getColor(\"primary\")};\n }\n`","import React, { ReactNode, ReactElement } from \"react\"\nimport { List } from \"@rmwc/list\"\nimport { MenuSurfaceAnchor, MenuSurface } from \"@rmwc/menu\"\nimport {\n RootContainer, ListContainer, DropdownContainer, OpenerIcon,\n} from \"./styled\"\n\ninterface Props {\n isOpen: boolean\n onMenuToggle: (isOpen: boolean) => void\n title?: string\n renderTitle?: () => ReactElement\n renderOpener?: () => ReactElement | null\n children: ReactNode\n className?: string\n anchorCorner?: any\n}\n\nexport const Dropdown = ({\n title,\n children,\n className,\n renderTitle,\n isOpen = false,\n onMenuToggle,\n anchorCorner = \"bottomStart\",\n renderOpener,\n}: Props) => {\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 open={isOpen} onClose={handleClose} anchorCorner={anchorCorner}>\n <ListContainer>\n <List>{children}</List>\n </ListContainer>\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 SpriteSymbol from \"../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"header-clock\",\n \"use\": \"header-clock-usage\",\n \"viewBox\": \"0 0 14 14\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 14 14\\\" id=\\\"header-clock\\\"><path d=\\\"M7 1.667c-3.307 0-6 2.693-6 6a5.98 5.98 0 001.26 3.666L1.167 12.56a.665.665 0 00.493 1.107.652.652 0 00.5-.227l1.02-1.147A5.977 5.977 0 007 13.667c3.307 0 6-2.694 6-6 0-3.307-2.693-6-6-6zm0 10.666a4.672 4.672 0 01-4.667-4.666A4.672 4.672 0 017 3a4.672 4.672 0 014.667 4.667A4.672 4.672 0 017 12.333zM1.78 3.527A1.266 1.266 0 011.667 3c0-.733.6-1.333 1.333-1.333.26 0 .5.08.707.206.42-.24.86-.433 1.326-.58A2.652 2.652 0 003 .333 2.666 2.666 0 00.333 3c0 .673.26 1.287.674 1.753.213-.433.473-.846.773-1.226zM11 1.667c.733 0 1.333.6 1.333 1.333 0 .187-.04.367-.113.527.3.38.553.786.767 1.226.42-.466.68-1.08.68-1.753A2.666 2.666 0 0011 .333c-.82 0-1.547.38-2.033.96.466.147.906.34 1.326.58.207-.126.447-.206.707-.206zM7 4.333v3.334l2.007-2.66a3.227 3.227 0 00-.947-.5c-.34-.114-.7-.174-1.06-.174zm5.193 7.507c-.28.347-.593.667-.933.953l.573.647a.674.674 0 00.5.227.665.665 0 00.493-1.107l-.633-.72z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport {\n ShortPick, ShortPickElement, HeaderSvg, ShortPickHeader,\n} from \"./styled\"\n// @ts-ignore\nimport Clock from \"./assets/header-clock.svg\"\n\ntype ShortPickerPropsT = {\n handleDatesChange: any\n selectedStart: number\n tagging: string\n}\nconst AlarmClock = () => (\n <HeaderSvg>\n <use xlinkHref={`#${Clock.id}`} />\n </HeaderSvg>\n)\nconst MINUTE = 60\nconst HOUR = MINUTE * 60\nconst PRESET_RANGES: [string, number][] = [\n [\"Last 5 minutes\", -5 * MINUTE],\n [\"Last 15 minutes\", -15 * MINUTE],\n [\"Last 30 minutes\", -30 * MINUTE],\n [\"Last 2 hours\", -2 * HOUR],\n [\"Last 6 hours\", -6 * HOUR],\n [\"Last 12 hours\", -12 * HOUR],\n]\n\nexport const ShortPickArea = (props: ShortPickerPropsT) => {\n const { handleDatesChange, selectedStart, tagging } = props\n\n function applyChanges(alias: string, timeCorrection: number) {\n return () => {\n handleDatesChange({\n startDate: timeCorrection,\n endDate: 0,\n })\n }\n }\n return (\n <ShortPick>\n <ShortPickHeader>\n <AlarmClock />\n &nbsp; Quick Selector\n </ShortPickHeader>\n {PRESET_RANGES.map(([text, time]) => (\n <ShortPickElement\n key={time}\n onClick={applyChanges(text, time)}\n isSelected={time === selectedStart}\n data-testid={`date-picker::click-quick-selector::${tagging}::${-time}`}\n >\n {text}\n </ShortPickElement>\n ))}\n </ShortPick>\n )\n}\n","import { DateResolution } from \"./types\"\n\nexport const MINUTE = 60\nexport const HOUR = MINUTE * 60\nexport const DAY = HOUR * 24\nexport const MONTH = DAY * 30\n\ntype GuessResolutionAndValue = (after: number) => { resolution: DateResolution; value: number }\n\nexport const guessResolutionAndValue: GuessResolutionAndValue = (after: number) => {\n let resolution: DateResolution\n let value: number\n if (after >= MONTH) {\n resolution = \"month\"\n value = Math.round(after / MONTH)\n } else if (after >= DAY) {\n resolution = \"day\"\n value = Math.round(after / DAY)\n } else if (after >= HOUR) {\n resolution = \"hour\"\n value = Math.round(after / HOUR)\n } else {\n resolution = \"minute\"\n value = Math.round(after / MINUTE)\n }\n return {\n resolution,\n value,\n }\n}\n\nexport const getShortHandTimeAlias = (after: number) => {\n const { value, resolution } = guessResolutionAndValue(after)\n if (value > 1) {\n return `Last ${value} ${resolution}s`\n }\n return `Last ${resolution}`\n}\n","import SpriteSymbol from \"../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"arrow\",\n \"use\": \"arrow-usage\",\n \"viewBox\": \"0 0 13 9\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 13 9\\\" id=\\\"arrow\\\"><path d=\\\"M8.4.6c-.2-.2-.5-.2-.7 0-.2.2-.2.5 0 .7L10.3 4H.5c-.3 0-.5.2-.5.5s.2.5.5.5h9.8L7.7 7.6c-.2.2-.2.5 0 .7.1.1.2.1.4.1s.3 0 .4-.1l3.9-3.9-4-3.8z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"calendar\",\n \"use\": \"calendar-usage\",\n \"viewBox\": \"0 0 20 20\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\" id=\\\"calendar\\\"><path d=\\\"M17.1 2H17V1c0-.6-.4-1-1-1s-1 .4-1 1v1h-4V1c0-.6-.4-1-1-1S9 .4 9 1v1H5V1c0-.6-.4-1-1-1S3 .4 3 1v1h-.1C1.3 2 0 3.3 0 4.9v12.2C0 18.7 1.3 20 2.9 20h14.2c1.6 0 2.9-1.3 2.9-2.9V4.9C20 3.3 18.7 2 17.1 2zm.9 15.1c0 .5-.4.9-.9.9H2.9c-.5 0-.9-.4-.9-.9V8h16v9.1zM18 6H2V4.9c0-.5.4-.9.9-.9h14.2c.5 0 .9.4.9.9V6z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React from \"react\"\nimport moment from \"moment\"\n\nimport { AccessorBox, HeaderSvg, IconSpacer } from \"./styled\"\nimport { PickedValues } from \"./types\"\nimport { getShortHandTimeAlias, MINUTE } from \"./utils\"\n// @ts-ignore\nimport ArrowSvg from \"./assets/arrow.svg\"\n// @ts-ignore\nimport CalendarSvg from \"./assets/calendar.svg\"\n\nconst Arrow = () => (\n <HeaderSvg>\n <use xlinkHref={`#${ArrowSvg.id}`} />\n </HeaderSvg>\n)\n\nconst Calendar = () => (\n <IconSpacer>\n <HeaderSvg>\n <use xlinkHref={`#${CalendarSvg.id}`} />\n </HeaderSvg>\n </IconSpacer>\n)\n\ntype PickerAccessorPropsT = {\n onClick: () => void\n} & PickedValues\n\nexport const PickerAccessorElement = (props: PickerAccessorPropsT) => {\n const { onClick, start = 15 * MINUTE, end } = props\n if (start < 0) {\n return (\n <AccessorBox onClick={onClick}>\n <Calendar />\n <>{getShortHandTimeAlias(-start)}</>\n </AccessorBox>\n )\n }\n const startAlias = moment(start).format(\"DD/MM/YYYY HH:mm\")\n const endAlias = moment(end).format(\"DD/MM/YYYY HH:mm\")\n return (\n <AccessorBox onClick={onClick}>\n <Calendar />\n {startAlias}\n &nbsp;\n <Arrow />\n &nbsp;\n {endAlias}\n </AccessorBox>\n )\n}\n","import React, { useState, ChangeEvent } from \"react\"\nimport moment from \"moment\"\nimport { guessResolutionAndValue } from \"./utils\"\nimport {\n StyledDropdown,\n TextBox,\n DropdownIcon,\n TypeViewBox,\n DropdownBox,\n LastText,\n CustomInput,\n ShortPickElement,\n} from \"./styled\"\nimport { DateResolution, PickedValues } from \"./types\"\n\ntype ShortPickerPropsT = {\n setRangeValues: (params: PickedValues) => void\n handleDatesChange: any\n selectedStart: number\n tagging: string\n}\n\nconst dateResolutions: DateResolution[] = [\"minute\", \"hour\", \"day\", \"month\"]\n\nconst pluralize = (resolution: DateResolution, value: number) => (value === 1\n ? resolution : `${resolution}s`\n)\n\nconst getNewStart = (timeCorrection: number, resolution: DateResolution) => (\n -moment.duration(timeCorrection, resolution).as(\"seconds\")\n)\n\nexport function CustomShortPicker(props: ShortPickerPropsT) {\n const {\n setRangeValues, handleDatesChange, selectedStart, tagging,\n } = props\n const { resolution, value: timeCorrection } = selectedStart <= 0\n ? guessResolutionAndValue(-selectedStart)\n : { resolution: \"hour\" as DateResolution, value: 0 }\n const [isDropdownOpen, toggleDropdown] = useState(false)\n\n const handleStartChange = (newStart: number) => {\n handleDatesChange({\n startDate: newStart,\n endDate: 0,\n })\n setRangeValues({\n start: newStart,\n end: 0,\n })\n }\n\n const applyChanges = (newResolution: DateResolution) => () => {\n handleStartChange(getNewStart(timeCorrection, newResolution))\n toggleDropdown(false)\n }\n\n function handleChange(e: ChangeEvent<HTMLInputElement>) {\n const newTimeCorrection = Number(e.currentTarget.value)\n if (!Number.isNaN(newTimeCorrection)) {\n handleStartChange(getNewStart(newTimeCorrection, resolution))\n }\n }\n\n const renderTitle = () => (\n <TypeViewBox>\n <TextBox>{pluralize(resolution, Number(timeCorrection))}</TextBox>\n <DropdownIcon name=\"triangle_down\" />\n </TypeViewBox>\n )\n\n return (\n <DropdownBox data-testid={`date-picker::click-last-integer::${tagging}`}>\n <LastText>Last</LastText>\n <CustomInput\n value={timeCorrection}\n onChange={handleChange}\n data-testid={`date-picker::click-last-integer::${tagging}::${timeCorrection}`}\n />\n <StyledDropdown\n isOpen={isDropdownOpen}\n onMenuToggle={toggleDropdown}\n renderTitle={renderTitle}\n renderOpener={() => null}\n >\n {dateResolutions.map((dateResolution) => (\n <ShortPickElement\n key={dateResolution}\n onClick={applyChanges(dateResolution)}\n data-testid={`date-picker::click-last-time-${dateResolution}::${tagging}`}\n >\n {pluralize(dateResolution, Number(timeCorrection))}\n </ShortPickElement>\n ))}\n </StyledDropdown>\n </DropdownBox>\n )\n}\n","import SpriteSymbol from \"../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"month_arrow_l\",\n \"use\": \"month_arrow_l-usage\",\n \"viewBox\": \"0 0 8 12\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 8 12\\\" id=\\\"month_arrow_l\\\"><path d=\\\"M7.41 1.41L6 0 0 6l6 6 1.41-1.41L2.83 6l4.58-4.59z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import SpriteSymbol from \"../../../../node_modules/svg-baker-runtime/browser-symbol.js\";\nimport sprite from \"../../../../node_modules/svg-sprite-loader/runtime/browser-sprite.build.js\";\nvar symbol = new SpriteSymbol({\n \"id\": \"month_arrow_r\",\n \"use\": \"month_arrow_r-usage\",\n \"viewBox\": \"0 0 8 12\",\n \"content\": \"<symbol xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 8 12\\\" id=\\\"month_arrow_r\\\"><path d=\\\"M.59 10.59L2 12l6-6-6-6L.59 1.41 5.17 6 .59 10.59z\\\" /></symbol>\"\n});\nvar result = sprite.add(symbol);\nexport default symbol","import React, { useState, useMemo, useEffect } from \"react\"\nimport \"react-dates/initialize\"\nimport \"./custom-picker-styles.scss\"\nimport { DateRangePicker } from \"react-dates\"\nimport moment, { Moment } from \"moment\"\nimport { Button } from \"@netdata/netdata-ui\"\n\nimport { useCloseOnOutsideClick } from \"hooks/use-click-outside\"\n\nimport {\n PickerActionArea, PickerBox, PickerBtnArea, HeaderSvg, StyledSidebar,\n} from \"./styled\"\nimport { ShortPickArea } from \"./short-pick\"\nimport { PickerAccessorElement } from \"./accessor-element\"\nimport { CustomShortPicker } from \"./custom-short-pick\"\nimport { PickedValues } from \"./types\"\n// @ts-ignore\nimport MonthLeftSvg from \"./assets/month_arrow_l.svg\"\n// @ts-ignore\nimport MonthRightSvg from \"./assets/month_arrow_r.svg\"\n\nfunction pickerFormat() {\n return \"DD/MM/YYYY HH:mm\"\n}\n\nfunction disabledDates(day: Moment): boolean {\n return day.diff(moment(), \"seconds\") > 0\n}\n\nconst MonthLeft = () => (\n <HeaderSvg id=\"month_left\">\n <use xlinkHref={`#${MonthLeftSvg.id}`} />\n </HeaderSvg>\n)\nconst MonthRight = () => (\n <HeaderSvg id=\"month_right\">\n <use xlinkHref={`#${MonthRightSvg.id}`} />\n </HeaderSvg>\n)\n\ntype PickerPropsT = {\n isOpen: boolean\n pickedValues: PickedValues\n handleOpenState: (state: boolean) => void\n setRangeValues: (params: PickedValues) => void\n tagging?: string\n}\n\ntype HandleRangeChangeT = {\n startDate: number | Moment | null\n endDate: number | Moment | null\n}\n\nfunction handleChangeDateByManualInput(\n dateToBeSet: Moment | number,\n setterFn: (date: number) => void,\n): void {\n if (typeof dateToBeSet === \"number\") {\n setterFn(dateToBeSet)\n } else if (dateToBeSet) {\n const { input } = dateToBeSet.creationData()\n if (input && typeof input !== \"number\") {\n setterFn(moment(input, \"DD/MM/YYYY HH:mm\").valueOf())\n } else {\n setterFn(dateToBeSet.valueOf())\n }\n }\n}\n\nconst convertToMoment = (time: number) => {\n if (time > 0) {\n return moment(time)\n }\n return moment(new Date().valueOf() + time * 1000)\n}\n\nconst focusTaggingMap: { [key: string]: string } = {\n startDate: \"start\",\n endDate: \"finish\",\n}\n\nexport const Picker = (props: PickerPropsT) => {\n const {\n isOpen, handleOpenState, setRangeValues, pickedValues, tagging = \"\",\n } = props\n\n const [startDateState, setStartDate] = useState<number>(pickedValues.start)\n const [endDateState, setEndDate] = useState<number>(pickedValues.end)\n\n const startDateMoment = useMemo(() => convertToMoment(startDateState), [startDateState])\n const endDateMoment = useMemo(() => convertToMoment(endDateState), [endDateState])\n\n useEffect(() => {\n setStartDate(pickedValues.start)\n }, [pickedValues.start])\n\n useEffect(() => {\n setEndDate(pickedValues.end)\n }, [pickedValues.end])\n\n const [focusedInput, setFocusedInput] = useState<any>(\"startDate\")\n\n function handleDatesChange({ startDate, endDate }: HandleRangeChangeT) {\n if (startDate === null || endDate === null) {\n // nulls can happen when date is not properly entered in input field\n return\n }\n handleChangeDateByManualInput(endDate, setEndDate)\n handleChangeDateByManualInput(startDate, setStartDate)\n }\n function clear() {\n setEndDate(0)\n setStartDate(-60 * 15)\n setRangeValues({\n start: -60 * 15,\n end: 0,\n })\n }\n\n function close() {\n handleOpenState(false)\n }\n const ref = useCloseOnOutsideClick(close)\n\n function keepFocus(fi: any) {\n if (!fi) return\n setFocusedInput(fi)\n }\n function clickApply() {\n setRangeValues({\n start: startDateState,\n end: endDateState,\n })\n close()\n }\n\n\n const focusTagging = focusTaggingMap[focusedInput]\n\n const pickerModal = (\n <StyledSidebar right closeOnEsc closeOnOverlayClick>\n <PickerBox ref={ref}>\n <PickerActionArea>\n <ShortPickArea\n handleDatesChange={handleDatesChange}\n selectedStart={startDateState}\n tagging={tagging}\n />\n <DateRangePicker\n onDatesChange={handleDatesChange}\n daySize={30}\n focusedInput={focusedInput}\n onFocusChange={keepFocus}\n hideKeyboardShortcutsPanel\n enableOutsideDays\n isOutsideRange={disabledDates}\n firstDayOfWeek={1}\n verticalSpacing={0}\n displayFormat={pickerFormat}\n endDate={endDateMoment}\n startDate={startDateMoment}\n startDateId=\"dpStartDateInput\"\n openDirection=\"up\"\n endDateId=\"dpEndDateInput\"\n navNext={<MonthRight />}\n navPrev={<MonthLeft />}\n />\n </PickerActionArea>\n <PickerBtnArea>\n <CustomShortPicker\n setRangeValues={setRangeValues}\n handleDatesChange={handleDatesChange}\n selectedStart={startDateState}\n tagging={tagging}\n />\n <Button\n label=\"CLEAR\"\n flavour=\"borderless\"\n onClick={clear}\n data-testid={`date-picker::click-clear::${tagging}-${focusTagging}`}\n />\n <Button\n label=\"APPLY\"\n onClick={clickApply}\n data-testid={`date-picker::click-apply::${tagging}-${focusTagging}`}\n />\n </PickerBtnArea>\n </PickerBox>\n </StyledSidebar>\n )\n\n return (\n <>\n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n <PickerAccessorElement onClick={() => handleOpenState(true)} {...pickedValues} />\n {isOpen && pickerModal}\n </>\n )\n}\n","import { useCallback, useEffect, useRef } from \"react\"\n\nexport const useCloseOnOutsideClick = (onClose: () => void) => {\n const ref = useRef(null)\n const escapeListener = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n onClose()\n }\n },\n [onClose],\n )\n const clickListener = useCallback(\n (e: MouseEvent) => {\n if (ref.current && !(ref.current! as any).contains(e.target)) {\n if (onClose && typeof onClose === \"function\") {\n onClose()\n }\n }\n },\n [onClose],\n )\n useEffect(() => {\n document.addEventListener(\"click\", clickListener)\n document.addEventListener(\"keyup\", escapeListener)\n return () => {\n document.removeEventListener(\"click\", clickListener)\n document.removeEventListener(\"keyup\", escapeListener)\n }\n }, [clickListener, escapeListener])\n return ref\n}\n","import React, { useState, useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { selectGlobalPanAndZoom, selectDefaultAfter } from \"domains/global/selectors\"\nimport {\n resetGlobalPanAndZoomAction,\n setDefaultAfterAction,\n setGlobalPanAndZoomAction,\n} from \"domains/global/actions\"\n\nimport { Picker } from \"./picker\"\nimport { PickedValues } from \"./types\"\n\ninterface Props {\n tagging?: string\n}\nexport const ReduxWrappedPicker = ({ tagging }: Props) => {\n const dispatch = useDispatch()\n\n const [isOpen, setOpenState] = useState<boolean>(false)\n\n const globalPanAndZoom = useSelector(selectGlobalPanAndZoom)\n const isGlobalPanAndZoom = Boolean(globalPanAndZoom)\n\n const defaultAfter = useSelector(selectDefaultAfter)\n const pickedValues = {\n start: isGlobalPanAndZoom ? globalPanAndZoom!.after : defaultAfter,\n end: isGlobalPanAndZoom ? globalPanAndZoom!.before : 0,\n }\n function controlOpenState(state: boolean) {\n setOpenState(state)\n }\n\n function handlePickedValuesChange(params: PickedValues) {\n const { start, end } = params\n if (start < 0) {\n // live mode\n dispatch(\n setDefaultAfterAction({\n after: start,\n }),\n )\n if (isGlobalPanAndZoom) {\n dispatch(resetGlobalPanAndZoomAction())\n }\n } else {\n // global-pan-and-zoom mode\n dispatch(\n setGlobalPanAndZoomAction({\n after: start,\n before: end,\n }),\n )\n }\n }\n\n useEffect(() => {\n const { start, end } = pickedValues\n if (window.urlOptions) {\n if (window.urlOptions.after !== start || window.urlOptions.before !== end) {\n const isPanAndZoom = start > 0\n window.urlOptions.netdataPanAndZoomCallback(isPanAndZoom, start, end)\n }\n }\n }, [pickedValues])\n\n return (\n <Picker\n isOpen={isOpen}\n pickedValues={pickedValues}\n handleOpenState={controlOpenState}\n setRangeValues={handlePickedValuesChange}\n tagging={tagging}\n />\n )\n}\n","import React from \"react\"\nimport { ThemeProvider } from \"styled-components\"\nimport { ReduxWrappedPicker } from \"components/date-picker\"\nimport { DarkTheme } from \"@netdata/netdata-ui\"\nimport Item from \"./item\"\n\nconst DateTimePicker = () => (\n <ThemeProvider theme={DarkTheme}>\n <Item hasBorder>\n <ReduxWrappedPicker />\n </Item>\n </ThemeProvider>\n)\n\nexport default DateTimePicker\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\"\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 <Pill background=\"error\" hollow {...pillProps}>\n {critical}\n </Pill>\n <Pill background=\"warning\" hollow {...pillProps}>\n {warning}\n </Pill>\n </Item>\n )\n}\n\nexport default Alarms\n","import React from \"react\"\nimport { Flex, Icon, TextBig, Button } from \"@netdata/netdata-ui\"\n\nconst Header = ({ onClose }) => {\n return (\n <Flex\n border={{ side: \"bottom\", color: \"selected\" }}\n justifyContent=\"between\"\n alignItems=\"center\"\n padding={[0, 0, 4, 0]}\n >\n <Flex gap={2}>\n <Icon color=\"text\" name=\"insights\" />\n <TextBig strong>Netdata News</TextBig>\n </Flex>\n <Button flavour=\"borderless\" neutral icon=\"x\" title=\"close news\" onClick={onClose} />\n </Flex>\n )\n}\n\nexport default Header\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Image = styled(Flex).attrs({ as: \"img\" })`\n object-fit: cover;\n`\nexport default Image\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Anchor = styled(Flex).attrs({ as: \"a\" })`\n text-decoration: none;\n & :hover {\n text-decoration: none;\n }\n`\nexport default Anchor\n","import React from \"react\"\nimport { Flex, Icon, Text, TextSmall } from \"@netdata/netdata-ui\"\nimport Image from \"./image\"\nimport Anchor from \"./anchor\"\n\nconst Item = ({ item }) => {\n const { last_publication_date: publishedAt, data } = item\n const { title, description, url, image, label } = data\n\n const imageSrc = image && image.url\n const dateFormated = new Date(publishedAt)\n\n return (\n <Flex column gap={2}>\n <Flex gap={4}>\n {imageSrc && <Image src={imageSrc} width=\"160px\" />}\n <Flex column gap={2}>\n <Text strong>{title}</Text>\n <Text>{description}</Text>\n </Flex>\n </Flex>\n <Flex justifyContent=\"between\" alignItems=\"center\">\n <TextSmall>{dateFormated.toLocaleDateString()}</TextSmall>\n <Anchor href={url} target=\"_blank\" rel=\"noopener noreferrer\" gap={1} alignItems=\"center\">\n <Text color=\"success\" strong>\n {label}\n </Text>\n <Icon color=\"success\" rotate={2} name=\"arrow_left\" />\n </Anchor>\n </Flex>\n </Flex>\n )\n}\n\nexport default Item\n","import styled from \"styled-components\"\nimport { Flex, webkitVisibleScrollbar } from \"@netdata/netdata-ui\"\n\nexport const Container = styled(Flex).attrs({\n overflow: { vertical: \"auto\" },\n padding: [0, 4, 0, 0],\n})`\n ${webkitVisibleScrollbar}\n`\n","import React, { Fragment, useCallback } from \"react\"\nimport { useToggle } from \"react-use\"\nimport { Layer, Flex } from \"@netdata/netdata-ui\"\nimport Header from \"./header\"\nimport Item from \"./item\"\nimport { Container } from \"./container\"\n\nconst News = ({ children, items = [], onCloseClick }) => {\n const [isOpen, toggle] = useToggle()\n\n const onClose = useCallback(() => {\n toggle()\n if (onCloseClick) onCloseClick()\n }, [toggle, onCloseClick])\n\n return (\n <Fragment>\n {children(toggle, isOpen)}\n {isOpen && (\n <Layer backdrop onClickOutside={onClose} onEsc={onClose}>\n <Flex\n background=\"mainBackground\"\n round\n padding={[6]}\n width=\"640px\"\n height={{ max: \"640px\" }}\n gap={4}\n column\n >\n <Header onClose={onClose} />\n <Container column gap={6}>\n {items.map(item => (\n <Item key={item.id} item={item} />\n ))}\n </Container>\n </Flex>\n </Layer>\n )}\n </Fragment>\n )\n}\n\nexport default News\n","import Prismic from \"@prismicio/client\"\n\nconst apiEndpoint = \"https://netdata-news.cdn.prismic.io/api/v2\"\nconst client = Prismic.client(apiEndpoint)\n\nexport const fetchNews = async onSuccess => {\n const response = await client.query(\n Prismic.Predicates.at(\"document.type\", \"news__announcements\"),\n { pageSize: 100, orderings: \"[document.last_publication_date desc]\" }\n )\n if (!response) return\n if (onSuccess) onSuccess(response)\n}\n","import React, { useCallback, useMemo, useEffect, useState } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport News from \"components/news\"\nimport { fetchNews } from \"./dataSource\"\n\nconst AgentNews = () => {\n const [value, setValue] = useLocalStorage(\"news_last_seen\")\n const [news, setNews] = useState([])\n\n useEffect(() => {\n fetchNews(({ results }) => setNews(results))\n }, [])\n\n const upToDate = useMemo(() => {\n if (!news.length) return true\n\n const [firstItem] = news\n const { last_publication_date: publishedAt } = firstItem\n\n const latestEntry = new Date(publishedAt)\n const lastSeen = new Date(value)\n return lastSeen >= latestEntry\n }, [value, news])\n\n const onClose = useCallback(() => {\n const now = new Date()\n setValue(now)\n }, [setValue])\n\n return (\n <News items={news} onCloseClick={onClose}>\n {toggle => (\n <Button\n themeType=\"dark\"\n name=\"news\"\n title=\"News & Features\"\n icon=\"insights\"\n flavour=\"borderless\"\n neutral={upToDate}\n warning={!upToDate}\n onClick={toggle}\n />\n )}\n </News>\n )\n}\nexport default AgentNews\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 }) => {\n const [hasSignedInBefore] = useLocalStorage(\"has-sign-in-history\")\n const signInUrl = useSelector(state => selectSignInUrl(hasSignedInBefore)(state))\n const isRegistry = useSelector(isRegistrySelector)\n const offline = useSelector(offlineSelector)\n\n const dispatch = useDispatch()\n\n const link = useMemo(() => {\n const { href } = window.location\n const redirectURI = encodeURIComponent(href)\n return `${signInUrl}&redirect_uri=${redirectURI}`\n }, [signInUrl])\n\n const onSignIn = useCallback(\n () =>\n dispatch(\n showSignInModalAction({\n signInLinkHref: link,\n })\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [link]\n )\n\n return useMemo(\n () =>\n typeof children === \"function\"\n ? children({ isRegistry, link, onSignIn, offline, hasSignedInBefore })\n : children,\n [children, isRegistry, link, onSignIn, offline, hasSignedInBefore]\n )\n}\n\nexport default SignIn\n","import { useEffect, useCallback, useState } from \"react\"\n\ntype IframesMessageType = \"spaces\" | \"workspaces\"\n | \"hello-from-spaces-bar\" | \"hello-from-space-panel\" | \"hello-from-sign-in\"\n | \"is-signed-in\" | \"streamed-hosts-data\" | \"has-focus\" | \"iframe-focus-change\"\n | \"synced-private-registry\" | \"set-is-logout-dropdown-opened\"\n\ninterface IframesMessage<T = unknown> {\n type: IframesMessageType\n payload: T\n}\n\n\nexport const sendToChildIframe = (\n htmlIframeElement: HTMLIFrameElement, message: IframesMessage,\n) => {\n if (htmlIframeElement.contentWindow) {\n htmlIframeElement.contentWindow.postMessage(message, \"*\")\n }\n}\n\nexport const useListenToPostMessage = <T>(\n messageType: IframesMessageType,\n callback?: (newMessage: T) => void,\n defaultState?: T | (() => T),\n): [T | undefined, () => void] => {\n const [lastMessage, setLastMessage] = useState<T | undefined>(defaultState)\n const handleMessage = useCallback((message) => {\n const data = message.data as IframesMessage<T>\n if (data.type === messageType) {\n setLastMessage(data.payload)\n if (callback) {\n callback(data.payload)\n }\n }\n }, [callback, messageType])\n const resetMesssage = useCallback(() => {\n setLastMessage(defaultState as T)\n }, [defaultState])\n useEffect(() => {\n window.addEventListener(\"message\", handleMessage)\n return () => {\n window.removeEventListener(\"message\", handleMessage)\n }\n }, [handleMessage, messageType])\n return [lastMessage, resetMesssage]\n}\n","import React, { useCallback, useEffect, useState, useRef } from \"react\"\nimport styled from \"styled-components\"\nimport { useSelector, useDispatch } from \"store/redux-separate-context\"\nimport { useLocalStorage } from \"react-use\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { sendToChildIframe, useListenToPostMessage } from \"utils/post-message\"\nimport { getIframeSrc, NETDATA_REGISTRY_SERVER } from \"utils/utils\"\nimport { selectRegistry, selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { LOCAL_STORAGE_NEEDS_SYNC } from \"domains/dashboard/sagas\"\nimport { setOfflineAction } from \"@/src/domains/dashboard/actions\"\n\nconst IframeContainer = styled(Flex).attrs({ position: \"absolute\" })`\n display: none;\n`\nconst Iframe = ({ signedIn }) => {\n const [rendered, setRendered] = useState(false)\n const signInMsg = useRef()\n const ref = useRef()\n\n const [lsValue, , removeLsValue] = useLocalStorage(LOCAL_STORAGE_NEEDS_SYNC)\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n const registry = useSelector(selectRegistry)\n\n const dispatch = useDispatch()\n\n const { origin, pathname } = window.location\n const nameParam = encodeURIComponent(registry.hostname)\n const originParam = encodeURIComponent(origin + pathname)\n\n const signInIframeUrl = getIframeSrc(\n cloudBaseURL,\n `sign-in?id=${registry.machineGuid}&name=${nameParam}&origin=${originParam}`\n )\n\n useListenToPostMessage(\"hello-from-sign-in\", msg => {\n signInMsg.current = msg\n })\n\n const onLoad = useCallback(() => {\n setRendered(true)\n setTimeout(() => dispatch(setOfflineAction({ offline: signInMsg.current === undefined })), 500)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n const handler = e => {\n if (!e?.target) return\n if (e.target.src === signInIframeUrl && !rendered) onLoad()\n }\n\n window.addEventListener(\"DOMFrameContentLoaded\", handler)\n return () => window.removeEventListener(\"DOMFrameContentLoaded\", handler)\n }, [signInIframeUrl, rendered, onLoad])\n\n useEffect(() => {\n if (!signedIn || !ref.current) return\n if (!registry.registryServer || registry.registryServer === NETDATA_REGISTRY_SERVER) return\n if (!lsValue) return\n\n removeLsValue()\n\n const { registryMachinesArray } = registry\n if (registryMachinesArray && registryMachinesArray.length > 0) {\n sendToChildIframe(ref.current, {\n type: \"synced-private-registry\",\n payload: registryMachinesArray,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signedIn, registry, lsValue])\n\n return <IframeContainer as=\"iframe\" src={signInIframeUrl} onLoad={onLoad} />\n}\n\nexport default Iframe\n","import { useCallback, useState } from \"react\"\nimport { useLocalStorage } from \"react-use\"\nimport { useDispatch } from \"react-redux\"\nimport { useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { isSignedInAction } from \"@/src/domains/dashboard/actions\"\n\nconst useCheckSignInStatus = () => {\n const dispatch = useDispatch()\n const [value, setValue] = useLocalStorage(\"has-sign-in-history\")\n const [hasSignedInBefore, setHasSignedInBefore] = useState(value)\n\n const onMessage = useCallback(isNew => {\n if (isNew) {\n setHasSignedInBefore(isNew)\n setValue(isNew)\n }\n dispatch(isSignedInAction({ isSignedIn: isNew }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const [signedIn] = useListenToPostMessage(\"is-signed-in\", onMessage)\n\n return [signedIn, hasSignedInBefore]\n}\n\nexport default useCheckSignInStatus\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Button } from \"@netdata/netdata-ui\"\nimport SignInButton from \"components/auth/signIn\"\nimport SignInIframe from \"components/auth/signIn/iframe\"\nimport useCheckSignInStatus from \"components/auth/signIn/useCheckSignInStatus\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\n\nconst SignIn = () => {\n const [signedIn] = useCheckSignInStatus()\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return (\n cloudEnabled && (\n <React.Fragment>\n <SignInIframe signedIn={signedIn} />\n {!signedIn && (\n <SignInButton>\n {({ isRegistry, link, hasSignedInBefore, offline, onSignIn }) => (\n <Button\n label={hasSignedInBefore ? \"SIGN IN TO CLOUD\" : \"SIGN UP TO CLOUD\"}\n disabled={offline}\n {...(isRegistry ? { as: \"a\", href: link } : { onClick: onSignIn })}\n />\n )}\n </SignInButton>\n )}\n </React.Fragment>\n )\n )\n}\n\nexport default SignIn\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Item from \"./item\"\nimport Node from \"./node\"\nimport Options from \"./options\"\nimport Version from \"./version\"\nimport DateTimePicker from \"./dateTimePicker\"\nimport Alarms from \"./alarms\"\nimport AgentNews from \"./news\"\nimport SignIn from \"./signIn\"\n\nconst Wrapper = styled(Flex).attrs({\n as: \"header\",\n position: \"relative\",\n justifyContent: \"between\",\n background: \"panel\",\n zIndex: 20,\n width: \"100%\",\n padding: [2, 4, 2, 4],\n})`\n pointer-events: all;\n`\n\nconst Header = () => (\n <Wrapper>\n <Flex alignItems=\"center\" gap={3}>\n <Node />\n </Flex>\n <Flex justifyContent=\"end\" alignItems=\"center\" gap={3}>\n <Item hasBorder>\n <Version />\n <AgentNews />\n <Options />\n </Item>\n <DateTimePicker />\n <Alarms />\n <SignIn />\n </Flex>\n </Wrapper>\n)\n\nexport default Header\n","import styled from \"styled-components\"\nimport { Button } from \"@netdata/netdata-ui\"\n\nconst ExpandButton = styled(Button)`\n&& {\n > .button-icon {\n width: 6px;\n height: 9px;\n }\n`\nexport default ExpandButton\n","import React, { 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 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 from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"@/src/utils\"\n\n\nconst SignOut = ({ flavour = \"default\", ...rest }) => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n return (\n <Flex\n alignItems=\"center\"\n as=\"iframe\"\n src={`${getIframeSrc(cloudBaseURL, \"sign-out\")}?type=${flavour}`}\n border={{ side: \"all\", size: \"0px\" }}\n width={{ max: \"128px\" }}\n height={{ max: \"40px\" }}\n {...rest}\n />\n )\n}\n\nexport default SignOut\n","import React, { useMemo } from \"react\"\nimport { ThemeProvider } from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { useToggle } from \"react-use\"\nimport { Flex, Button, DarkTheme, Text, Layer } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { MenuItem } from \"components/menus\"\nimport SignOut from \"components/auth/signOut\"\nimport SignIn from \"components/auth/signIn\"\n\nconst SignInItem = () => {\n const onClick = (e, link) => {\n e.stopPropagation()\n window.open(link, \"_blank\", \"noopener,noreferrer\")\n }\n return (\n <SignIn>\n {({ isRegistry, link, hasSignedInBefore, onSignIn }) => (\n <Text onClick={isRegistry ? e => onClick(e, link) : onSignIn}>\n {hasSignedInBefore ? \"Sign in\" : \"Sign up\"}\n </Text>\n )}\n </SignIn>\n )\n}\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn }) => isSignedIn\n)\n\nconst UserSettings = () => {\n const [isOpen, toggle] = useToggle()\n const signedIn = useSelector(isSignedInSelector)\n\n const menuItems = useMemo(\n () => [\n ...(signedIn\n ? [\n {\n children: \"Operational Status\",\n onClick: () =>\n window.open(\"https://status.netdata.cloud\", \"_blank\", \"noopener,noreferrer\"),\n },\n ]\n : []),\n ...(signedIn ? [{ separator: true }] : []),\n ...(signedIn\n ? [\n {\n children: <SignOut flavour=\"borderless\" height={{ max: \"18px\" }} />,\n },\n ]\n : [{ children: <SignInItem /> }]),\n ],\n [signedIn]\n )\n\n return (\n <ThemeProvider theme={DarkTheme}>\n <Button\n flavour=\"borderless\"\n neutral\n icon=\"user\"\n title=\"User settings\"\n name=\"userSettings\"\n onClick={toggle}\n />\n {isOpen && (\n <Layer\n position=\"bottom-left\"\n onClickOutside={toggle}\n onEsc={toggle}\n backdrop={false}\n margin={[5, 18]}\n >\n <Flex column width={52} background=\"mainBackground\" padding={[3]} round>\n {menuItems.map((item, i) => {\n if (item.separator) return <Flex height=\"1px\" background=\"disabled\" key={i} />\n return (\n <MenuItem\n key={i}\n padding={[2, 4]}\n round={1}\n {...(item.onClick && { onClick: item.onClick })}\n >\n {item.children}\n </MenuItem>\n )\n })}\n </Flex>\n </Layer>\n )}\n </ThemeProvider>\n )\n}\n\nexport default UserSettings\n","import React from \"react\"\nimport { Flex, Button } from \"@netdata/netdata-ui\"\n\nconst SpacesSkeleton = () => (\n <React.Fragment>\n <Flex\n width=\"40px\"\n height=\"40px\"\n round={2}\n border={{ side: \"all\", color: \"border\", size: \"2px\", type: \"dotted\" }}\n />\n <Flex height=\"1px\" background=\"separator\" width=\"20px\" />\n <Button icon=\"plus\" disabled />\n </React.Fragment>\n)\n\nexport default SpacesSkeleton\n","import React from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\nimport { getIframeSrc } from \"utils/utils\"\n\nconst SpacesIframe = () => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n return (\n <Flex\n as=\"iframe\"\n src={getIframeSrc(cloudBaseURL, \"space-bar\")}\n title=\"Space Bar\"\n height=\"100%\"\n width=\"100%\"\n border={{ side: \"all\", size: \"0px\" }}\n overflow=\"hidden\"\n />\n )\n}\n\nexport default SpacesIframe\n","import React from \"react\"\n\nconst NetdataLogo = ({ width, height, fill = \"#FDFDFD\" }) => (\n <svg {...{ width, height }} viewBox=\"0 0 31 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.0002 0H0.630188L8.27019 24H19.0002C25.6202 24 31.0002 18.62 31.0002 12C31.0002 5.38 25.6202 0 19.0002 0Z\"\n fill={fill}\n />\n </svg>\n)\n\nexport default NetdataLogo\n","import React from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { Flex, Button, Documentation } from \"@netdata/netdata-ui\"\nimport { selectIsCloudEnabled } from \"domains/global/selectors\"\nimport ExpandButton from \"./expandButton\"\nimport UserSettings from \"./userSettings\"\nimport SpacesSkeleton from \"./spacesSkeleton\"\nimport SpacesIframe from \"./spacesIframe\"\nimport NetdataLogo from \"../netdataLogo\"\n\nconst Spaces = ({ isOpen, toggle, isSignedIn }) => {\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n return (\n <Flex\n column\n justifyContent=\"between\"\n background=\"panel\"\n padding={[3, 0]}\n width=\"64px\"\n alignItems=\"center\"\n gap={6}\n position=\"relative\"\n overflow=\"hidden\"\n >\n <Flex column gap={4} alignItems=\"center\" height=\"100%\" overflow=\"hidden\">\n <NetdataLogo width={32} height={32} />\n {!isOpen && (\n <ExpandButton\n icon=\"chevron_right_s\"\n onClick={toggle}\n small\n neutral\n flavour=\"borderless\"\n themeType=\"dark\"\n />\n )}\n {cloudEnabled && isSignedIn && <SpacesIframe />}\n {cloudEnabled && !isSignedIn && <SpacesSkeleton />}\n </Flex>\n <Flex column gap={4} alignItems=\"center\">\n <Documentation app=\"agent\">\n {toggle => (\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n className=\"btn\"\n icon=\"question\"\n onClick={toggle}\n title=\"Need help?\"\n />\n )}\n </Documentation>\n <Button\n flavour=\"borderless\"\n neutral\n themeType=\"dark\"\n className=\"btn\"\n data-toggle=\"modal\"\n data-target=\"#optionsModal\"\n icon=\"gear\"\n title=\"Settings\"\n />\n {cloudEnabled && <UserSettings />}\n </Flex>\n </Flex>\n )\n}\n\nexport default Spaces\n","// some old functions here, i don't have time to comprehend them now\n\n// --------------------------------------------------------------------\n// natural sorting\n// http://www.davekoelle.com/files/alphanum.js - LGPL\n\nconst naturalSortChunkify = (t: string) => {\n const tz = []\n let x = 0\n let y = -1; let n = 0 as boolean | number; let i; let j\n\n // eslint-disable-next-line no-cond-assign,no-plusplus\n while (i = (j = t.charAt(x++)).charCodeAt(0)) {\n const m = (i >= 48 && i <= 57)\n if (m !== n) {\n // eslint-disable-next-line no-plusplus\n tz[++y] = \"\"\n n = m\n }\n tz[y] += j\n }\n\n return tz\n}\n\n\nexport const naturalSortCompare = (a: string, b: string) => {\n const aa = naturalSortChunkify(a.toLowerCase())\n const bb = naturalSortChunkify(b.toLowerCase())\n\n // eslint-disable-next-line no-plusplus\n for (let x = 0; aa[x] && bb[x]; x++) {\n if (aa[x] !== bb[x]) {\n const c = Number(aa[x]); const\n d = Number(bb[x])\n if (c.toString() === aa[x] && d.toString() === bb[x]) {\n return c - d\n }\n return (aa[x] > bb[x]) ? 1 : -1\n }\n }\n return aa.length - bb.length\n}\n\n\ninterface ObjectsWithPriority {\n [key: string]: {\n priority: number\n }\n}\nexport const sortObjectByPriority = <T extends ObjectsWithPriority>(object: T) => {\n const sorted = Object.keys(object)\n\n sorted.sort((a, b) => {\n if (object[a].priority < object[b].priority) {\n return -1\n }\n if (object[a].priority > object[b].priority) {\n return 1\n }\n return naturalSortCompare(a, b)\n })\n\n return sorted\n}\n\n\ninterface PrioritySortObject {\n name: string\n priority: number\n}\nexport const prioritySort = <T extends PrioritySortObject>(a: T, b: T) => {\n if (a.priority < b.priority) {\n return -1\n }\n if (a.priority > b.priority) {\n return 1\n }\n return naturalSortCompare(a.name, b.name)\n}\n","import { naturalSortCompare } from \"domains/dashboard/utils/sorting\"\n\nconst getBaseUrl = hostname => {\n let base = document.location.origin.toString() + decodeURI(document.location.pathname.toString())\n if (base.endsWith(`/host/${hostname}/`)) {\n base = base.substring(0, base.length - `/host/${hostname}/`.toString().length)\n }\n\n if (base.endsWith(\"/\")) {\n base = base.substring(0, base.length - 1)\n }\n\n return base\n}\n\nconst getNodeUrl = (baseUrl, hostname) => `${baseUrl}/host/${hostname}/`\n\nconst getNodes = (hosts, hostname, hostsStatus) => {\n if (!hosts || !hostname) return {}\n\n // decodeURI, because pathname (which is hostname) can contain white-spaces\n // or other characters which are URIencoded when user clicks the link\n // and we need to match it with `chartsMetadata.hostname`\n const baseUrl = getBaseUrl(hostname)\n\n const [{ hostname: parentNodeHostname }] = hosts\n\n const parentNode = {\n hostname: parentNodeHostname,\n url: `${baseUrl}/`,\n }\n\n const replicatedNodes = hosts\n .slice(1)\n .map(({ hostname }, index) => ({\n hostname,\n url: getNodeUrl(baseUrl, hostname),\n status: hostsStatus[index + 1].reachable,\n }))\n .sort((a, b) => naturalSortCompare(a.hostname, b.hostname))\n\n return {\n parentNode,\n replicatedNodes,\n }\n}\n\nexport default getNodes\n","import styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\n\nconst Anchor = styled(Flex).attrs({\n as: \"a\",\n gap: 2,\n alignItems: \"center\",\n})`\n & :hover {\n text-decoration: none;\n }\n`\n\nexport default Anchor\n","import React from \"react\"\nimport { Flex, Text, Icon } from \"@netdata/netdata-ui\"\nimport Pill from \"components/header/pill\"\nimport Anchor from \"./anchor\"\n\nconst Node = ({ hostname, url, status }) => {\n return (\n <Anchor href={url} justifyContent=\"between\" padding={[0, 0, 0, 2]}>\n <Flex alignItems=\"center\" gap={2}>\n <Icon name=\"node\" color=\"bright\" />\n <Text color=\"bright\" truncate>\n {hostname}\n </Text>\n </Flex>\n <Pill background={status ? \"success\" : \"border\"} color=\"bright\" round={10}>\n {status ? \"Live\" : \"Off\"}\n </Pill>\n </Anchor>\n )\n}\n\nexport default Node\n","import React, { useState, useCallback, useMemo } from \"react\"\nimport styled from \"styled-components\"\nimport { Flex, Text, Icon, TextInput } from \"@netdata/netdata-ui\"\nimport { MenuList } from \"components/menus\"\nimport Anchor from \"./anchor\"\nimport Node from \"./node\"\n\nconst Search = styled(TextInput)`\n & > label {\n margin-bottom: 0;\n }\n`\n\nconst StyledIcon = styled(Icon)`\n transform: ${({ right }) => (right ? \"rotate(270deg)\" : \"none\")};\n`\n\nconst ReplicatedNodes = ({ parentNode, replicatedNodes }) => {\n const [listOpen, setListOpen] = useState(true)\n const [value, setValue] = useState(\"\")\n\n const toggleListOpen = useCallback(() => setListOpen(o => !o), [])\n const onChange = useCallback(e => setValue(e.target.value), [])\n\n const nodes = useMemo(() => {\n if (!value) return replicatedNodes\n return replicatedNodes.filter(({ hostname }) =>\n hostname.toLowerCase().includes(value.toLowerCase())\n )\n }, [replicatedNodes, value])\n\n return (\n <MenuList\n isOpen={listOpen}\n toggleOpen={toggleListOpen}\n label={\n <Flex alignItems=\"center\" justifyContent=\"between\">\n <Text strong color=\"border\">\n Replicated nodes\n </Text>\n <StyledIcon right={!listOpen} name=\"chevron_down\" size=\"small\" color=\"text\" />\n </Flex>\n }\n >\n <Flex column gap={4} padding={[4, 0, 0]}>\n <Anchor as=\"a\" href={parentNode.url} justifyContent=\"start\">\n <Icon name=\"nodes\" size=\"small\" color=\"bright\" />\n <Text color=\"bright\">{parentNode.hostname}</Text>\n </Anchor>\n {nodes.length >= 5 && (\n <Flex padding={[0, 0, 0, 2]}>\n <Search\n value={value}\n onChange={onChange}\n iconLeft={<Icon name=\"search_s\" size=\"small\" color=\"text\" />}\n metaShrinked\n />\n </Flex>\n )}\n <Flex column gap={2}>\n {nodes.map(({ hostname, url, status }) => (\n <Node key={hostname} hostname={hostname} url={url} status={status} />\n ))}\n </Flex>\n </Flex>\n </MenuList>\n )\n}\n\nexport default ReplicatedNodes\n","import React, { useRef, useEffect } from \"react\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport { sendToChildIframe, useListenToPostMessage } from \"@/src/utils/post-message\"\nimport { getIframeSrc } from \"@/src/utils\"\nimport { selectCloudBaseUrl } from \"domains/global/selectors\"\n\nconst SpacePanelIframe = ({ parentNode, replicatedNodes }) => {\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n const ref = useRef()\n\n const [spacePanelMessage] = useListenToPostMessage(\"hello-from-space-panel\")\n\n useEffect(() => {\n if (!spacePanelMessage || !ref.current) return\n sendToChildIframe(ref.current, {\n type: \"streamed-hosts-data\",\n payload: { parentNode, replicatedNodes },\n })\n }, [replicatedNodes, parentNode, spacePanelMessage])\n\n return (\n <Flex\n ref={ref}\n as=\"iframe\"\n src={getIframeSrc(cloudBaseURL, \"space-panel\")}\n title=\"space panel\"\n width=\"100%\"\n height=\"100%\"\n border={{ side: \"all\", size: \"0px\" }}\n />\n )\n}\n\nexport default SpacePanelIframe\n","import React from \"react\"\nimport { TextSmall } from \"@netdata/netdata-ui\"\n\nconst promptContent = {\n signIn: {\n title: \"Welcome back!\",\n content: [\n <TextSmall key=\"1\" color=\"bright\">\n Sign in again to enjoy the benefits of Netdata Cloud{\" \"}\n </TextSmall>,\n ],\n },\n signUp: {\n title: \"Welcome to Netdata Cloud!\",\n content: [\n <TextSmall key=\"1\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n A single place\n </TextSmall>{\" \"}\n for all your nodes.\n </TextSmall>,\n <TextSmall key=\"2\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Multi-node dashboards\n </TextSmall>{\" \"}\n out of the box.\n </TextSmall>,\n <TextSmall key=\"3\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Custom dashboards\n </TextSmall>{\" \"}\n for you to create, edit and share online.\n </TextSmall>,\n <TextSmall key=\"4\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Metric Correlations\n </TextSmall>{\" \"}\n to find the root cause of anything.\n </TextSmall>,\n <TextSmall key=\"5\" color=\"bright\">\n <TextSmall strong color=\"bright\">\n Centrally dispatched notifications\n </TextSmall>{\" \"}\n for all alarms of all your nodes.\n </TextSmall>,\n <TextSmall key=\"6\" color=\"bright\">\n And... It is{\" \"}\n <TextSmall\n as=\"a\"\n href=\"https://www.netdata.cloud/get-netdata/\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n strong\n color=\"bright\"\n >\n free, forever!\n </TextSmall>\n </TextSmall>,\n ],\n },\n}\n\nexport default promptContent\n","import React from \"react\"\nimport { Flex, Text, Button } from \"@netdata/netdata-ui\"\nimport SignIn from \"@/src/components/auth/signIn\"\nimport promptContent from \"./promptContent\"\n\nconst SignInPrompt = () => {\n return (\n <SignIn>\n {({ isRegistry, link, hasSignedInBefore, onSignIn, offline }) => {\n const { title, content } = promptContent[hasSignedInBefore ? \"signIn\" : \"signUp\"]\n return (\n <Flex\n background={['gray', 'trout']}\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={hasSignedInBefore ? \"SIGN IN TO CLOUD\" : \"SIGN UP TO CLOUD\"}\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={[\"gray\", \"trout\"]} column gap={1} padding={[10]}>\n <TextSmall color=\"bright\" strong textAlign=\"center\">\n Can't connect to Netdata Cloud\n </TextSmall>\n <NoNetwork />\n <TextNano color=\"bright\" textAlign=\"center\" margin={[2, 0, 0]}>\n Maybe you are behind a firewall or you don’t have connection to the internet\n </TextNano>\n </Flex>\n)\n\nexport default OfflinePrompt\n","import React, { useCallback } from \"react\"\nimport { useSelector } from \"react-redux\"\nimport { createSelector } from \"reselect\"\nimport { Flex, Text, TextSmall, Collapsible, Button } from \"@netdata/netdata-ui\"\nimport { selectIsUsingGlobalRegistry, selectIsCloudEnabled } from \"domains/global/selectors\"\nimport getNodes from \"./nodes\"\nimport ReplicatedNodes from \"./replicatedNodes\"\nimport SpacePanelIframe from \"./spacePanelIframe\"\nimport SignInPrompt from \"./prompts/signIn\"\nimport OfflinePrompt from \"./prompts/offline\"\n\nconst replicatedNodesSelector = createSelector(\n state => state.global.chartsMetadata.data || {},\n state => state.global.registry.fullInfoPayload.mirrored_hosts_status || {},\n ({ hosts, hostname }, hostsStatus) => getNodes(hosts, hostname, hostsStatus)\n)\n\nconst visitedNodesSelector = createSelector(\n state => state.global.registry,\n registry => registry.registryMachinesArray || []\n)\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn, offline }) => ({ isSignedIn, offline })\n)\n\nconst Space = ({ isOpen, toggle }) => {\n const { parentNode = {}, replicatedNodes = [] } = useSelector(replicatedNodesSelector)\n const visitedNodes = useSelector(visitedNodesSelector)\n const globalRegistry = useSelector(selectIsUsingGlobalRegistry)\n const { isSignedIn, offline } = useSelector(isSignedInSelector)\n const cloudEnabled = useSelector(selectIsCloudEnabled)\n\n const switchIdentity = useCallback(() => window.switchRegistryModalHandler(), [])\n\n return (\n <Collapsible width={74} background=\"panel\" open={isOpen} direction=\"horizontal\" persist>\n <Flex\n flex\n column\n overflow={{ vertical: \"hidden\" }}\n margin={[3, 0, 0]}\n border={{ side: \"left\", color: \"separator\" }}\n style={{ pointerEvents: \"all\" }}\n >\n <Flex overflow={{ vertical: \"auto\" }} flex column gap={4} padding={[4]}>\n <Flex alignSelf=\"end\">\n <Button\n neutral\n flavour=\"borderless\"\n themeType=\"dark\"\n small\n icon=\"chevron_left\"\n onClick={toggle}\n />\n </Flex>\n {!isSignedIn && (\n <>\n {!!replicatedNodes.length && (\n <ReplicatedNodes parentNode={parentNode} replicatedNodes={replicatedNodes} />\n )}\n {!!visitedNodes.length && (\n <Text strong color=\"border\">\n VisitedNodes\n </Text>\n )}\n </>\n )}\n {isSignedIn && (\n <SpacePanelIframe parentNode={parentNode} replicatedNodes={replicatedNodes} />\n )}\n </Flex>\n {globalRegistry && (\n <Flex border={{ side: \"top\" }} justifyContent=\"center\" alignItems=\"center\" padding={[6]}>\n <TextSmall onClick={switchIdentity}>Switch Identity</TextSmall>\n </Flex>\n )}\n {!isSignedIn && cloudEnabled && <SignInPrompt />}\n {offline && cloudEnabled && <OfflinePrompt />}\n </Flex>\n </Collapsible>\n )\n}\n\nexport default React.memo(Space)\n","import React, { useCallback, useEffect } from \"react\"\nimport styled from \"styled-components\"\nimport { createSelector } from \"reselect\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport { useDispatch, useSelector } from \"react-redux\"\nimport { useLocalStorage } from \"react-use\"\nimport { selectSpacePanelIsActive } from \"@/src/domains/global/selectors\"\nimport { setSpacePanelStatusAction } from \"@/src/domains/global/actions\"\nimport Spaces from \"./spaces\"\nimport Space from \"./space\"\n\nconst Wrapper = styled(Flex).attrs({ height: \"100vh\", zIndex: 10 })`\n pointer-events: all;\n`\n\nconst isSignedInSelector = createSelector(\n ({ dashboard }) => dashboard,\n ({ isSignedIn }) => isSignedIn\n)\n\nconst Sidebar = () => {\n const [lsValue, setLsValue] = useLocalStorage(\"space-panel-state\")\n const isOpen = useSelector(selectSpacePanelIsActive)\n const signedIn = useSelector(isSignedInSelector)\n\n const dispatch = useDispatch()\n\n const toggle = useCallback(() => {\n dispatch(setSpacePanelStatusAction({ isActive: !isOpen }))\n setLsValue(!isOpen)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen])\n\n useEffect(() => {\n dispatch(setSpacePanelStatusAction({ isActive: lsValue ? signedIn : false }))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [signedIn])\n\n return (\n <Wrapper>\n <Spaces isOpen={isOpen} toggle={toggle} isSignedIn={signedIn} />\n <Space isOpen={isOpen} toggle={toggle} offline={true} />\n </Wrapper>\n )\n}\n\nexport default React.memo(Sidebar)\n","import React from \"react\"\nimport styled from \"styled-components\"\nimport { Flex } from \"@netdata/netdata-ui\"\nimport Header from \"components/header\"\nimport Sidebar from \"components/sidebar\"\n\nconst Wrapper = styled(Flex).attrs({\n position: \"fixed\",\n justifyContent: \"start\",\n alignItems: \"start\",\n width: \"100%\",\n zIndex: 10,\n})`\n top: 0;\n left: 0;\n pointer-events: none;\n`\n\nconst Layout = ({ children, printMode }) => {\n\n if (printMode) return children\n\n return (\n <Wrapper>\n <Sidebar />\n <Header />\n {children}\n </Wrapper>\n )\n}\n\nexport default Layout\n","import { DefaultTheme, DarkTheme } from \"@netdata/netdata-ui\"\n\nexport type DashboardTheme = \"white\" | \"slate\"\n\nexport const mapTheme = (theme: DashboardTheme) => ({\n slate: DarkTheme,\n white: DefaultTheme,\n})[theme] || DarkTheme\n","import React, { useEffect, useLayoutEffect, useRef, useState } from \"react\"\nimport Ps from \"perfect-scrollbar\"\nimport { ThemeProvider } from \"styled-components\"\n\nimport \"@material/menu-surface/dist/mdc.menu-surface.css\"\n\n// intentionally loading before bootstrap styles\nimport \"./styles/main.css\"\n\n// needs to be included before bootstrap\nimport \"domains/chart/utils/jquery-loader\"\nimport \"bootstrap\"\nimport \"bootstrap-toggle\"\nimport \"bootstrap-toggle/css/bootstrap-toggle.min.css\"\n\nimport { useStore } from \"react-redux\"\nimport \"typeface-ibm-plex-sans\"\nimport \"@fortawesome/fontawesome-free/js/all\"\n\nimport \"styles/fonts.css\"\nimport { loadCss } from \"utils/css-loader\"\nimport { useDateTime } from \"utils/date-time\"\nimport { useSelector } from \"store/redux-separate-context\"\nimport {\n selectCloudBaseUrl,\n selectHasFetchedInfo,\n selectTheme,\n} from \"domains/global/selectors\"\nimport { Portals } from \"domains/chart/components/portals\"\nimport { useChartsMetadata } from \"domains/dashboard/hooks/use-charts-metadata\"\nimport { PrintModal } from \"domains/dashboard/components/print-modal\"\nimport { SidebarSocialMedia } from \"domains/dashboard/components/sidebar-social-media\"\nimport { SidebarSocialMediaPortal } from \"domains/dashboard/components/sidebar-social-media-portal\"\nimport { isPrintMode } from \"domains/dashboard/utils/parse-url\"\nimport useAlarmFromUrl from \"domains/dashboard/hooks/useAlarmFromUrl\"\nimport { useRegistry } from \"hooks/use-registry\"\nimport { useAlarms } from \"hooks/use-alarms\"\nimport { NotificationsContainer } from \"components/notifications-container\"\n\nimport Layout from \"components/layout\"\n\nimport \"./types/global\"\n\nimport { useInfo } from \"hooks/use-info\"\nimport { serverStatic } from \"utils/server-detection\"\nimport { mapTheme } from \"utils/map-theme\"\nimport { netdataCallback, updateLocaleFunctions } from \"./main\"\n\n// support legacy code\nwindow.Ps = Ps\n\n\nconst App: React.FC = () => {\n const store = useStore()\n useEffect(() => {\n // todo\n // @ts-ignore\n window.NETDATA.alarms = {}\n // @ts-ignore\n window.NETDATA.pause = callback => {\n callback()\n }\n netdataCallback(store)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n const [refreshHelper, setRefreshHelper] = useState<number>()\n // this is temporary, we will not need it when main.js will be fully refactored\n const haveDOMReadyForParsing = refreshHelper !== undefined\n // a workaround - each time parseDom is run, the portals are rerendered\n const parseDom = useRef(() => {\n setRefreshHelper(Math.random())\n })\n\n useEffect(() => {\n if (haveDOMReadyForParsing) {\n const loadOverlay = document.getElementById(\"loadOverlay\")\n if (loadOverlay) {\n loadOverlay.style.display = \"none\"\n }\n }\n }, [haveDOMReadyForParsing])\n\n const { localeDateString, localeTimeString } = useDateTime()\n useEffect(() => {\n updateLocaleFunctions({\n localeDateString,\n localeTimeString,\n })\n }, [localeDateString, localeTimeString])\n\n useRegistry(true)\n useAlarms(true)\n useInfo(true)\n\n const [hasFetchDependencies, setHasFetchDependencies] = useState(false)\n useLayoutEffect(() => {\n Promise.all([\n loadCss(serverStatic + window.NETDATA.themes.current.bootstrap_css),\n loadCss(serverStatic + window.NETDATA.themes.current.dashboard_css),\n ]).then(() => {\n setHasFetchDependencies(true)\n })\n }, [])\n\n const chartsMetadata = useChartsMetadata()\n const cloudBaseURL = useSelector(selectCloudBaseUrl)\n\n // @ts-ignore\n window.NETDATA.parseDom = parseDom.current\n\n const hasFetchedInfo = useSelector(selectHasFetchedInfo)\n const theme = useSelector(selectTheme)\n useAlarmFromUrl()\n\n\n return (\n <ThemeProvider theme={mapTheme(theme)}>\n {hasFetchDependencies && (\n // this needs to render after dynamic css files are loaded, otherwise netdata-ui\n // styling will have smaller priority than bootstrap css\n <NotificationsContainer />\n )}\n {chartsMetadata && cloudBaseURL && hasFetchedInfo && haveDOMReadyForParsing && (\n <Layout printMode={isPrintMode}>\n {hasFetchDependencies && (\n <>\n <Portals key={refreshHelper} />\n <SidebarSocialMediaPortal>\n <SidebarSocialMedia />\n </SidebarSocialMediaPortal>\n {isPrintMode && <PrintModal />}\n </>\n )}\n </Layout>\n )}\n </ThemeProvider>\n )\n}\n\nexport default App\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { fetchHelloAction } from \"domains/global/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useRegistry = (shouldUseRegistry: boolean) => {\n const registry = useSelector(selectRegistry)\n\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseRegistry && !registry.isFetchingHello && !registry.hasFetchedHello\n && !registry.isHelloCallError\n ) {\n dispatch(fetchHelloAction.request({\n serverDefault,\n }))\n }\n }, [dispatch, registry, shouldUseRegistry])\n}\n","import { useEffect } from \"react\"\n\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { startAlarmsAction } from \"domains/global/actions\"\nimport { selectHasStartedAlarms } from \"domains/global/selectors\"\nimport { serverDefault } from \"utils/server-detection\"\n\nexport const useAlarms = (shouldUseAlarms: boolean) => {\n const hasStartedAlarms = useSelector(selectHasStartedAlarms)\n\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseAlarms && !hasStartedAlarms) {\n dispatch(startAlarmsAction({\n serverDefault,\n }))\n }\n }, [dispatch, hasStartedAlarms, shouldUseAlarms])\n}\n","import { useEffect } from \"react\"\nimport { useDispatch, useSelector } from \"store/redux-separate-context\"\nimport { fetchInfoAction } from \"domains/chart/actions\"\nimport { selectRegistry } from \"domains/global/selectors\"\n\nexport const useInfo = (shouldUseInfo: boolean) => {\n const registry = useSelector(selectRegistry)\n const hasStartedInfo = registry?.hasStartedInfo || false\n const dispatch = useDispatch()\n useEffect(() => {\n if (shouldUseInfo && !hasStartedInfo) {\n dispatch(fetchInfoAction.request({\n poll: false,\n }))\n }\n }, [dispatch, hasStartedInfo, shouldUseInfo])\n}\n","import { useHttp } from \"hooks/use-http\"\nimport { serverDefault } from \"utils/server-detection\"\nimport { ChartsMetadata } from \"domains/global/types\"\n\nexport const useChartsMetadata = () => {\n const [chartsMetadata] = useHttp<ChartsMetadata>(`${serverDefault}api/v1/charts`)\n return chartsMetadata\n}\n","import { useMount } from \"react-use\"\n\nimport { useDispatch } from \"store/redux-separate-context\"\nimport { getHashParams } from \"utils/hash-utils\"\nimport { setAlarmAction, setGlobalPanAndZoomAction } from \"domains/global/actions\"\nimport { alarmStatuses } from \"domains/global/constants\"\n\nexport default () => {\n const dispatch = useDispatch()\n useMount(() => {\n const params = getHashParams()\n const alarmWhen = params[\"alarm_when\"]\n if (alarmWhen) {\n const alarmTime = Number(alarmWhen)\n\n const alarmStatus = params[\"alarm_status\"]\n const alarmChart = params[\"alarm_chart\"]\n const alarmValue = params[\"alarm_value\"]\n if (!alarmStatuses.includes(alarmStatus) || !alarmChart || !alarmValue) {\n return\n }\n\n dispatch(setAlarmAction({\n alarm: {\n chartId: alarmChart,\n status: alarmStatus,\n value: alarmValue,\n when: alarmTime,\n },\n }))\n const PADDING = 1000 * 60 * 5\n dispatch(setGlobalPanAndZoomAction({\n after: alarmTime * 1000 - PADDING,\n before: alarmTime * 1000 + PADDING,\n }))\n }\n })\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Provider } from \"react-redux\"\n\nimport { store } from \"store\"\n\n// resolved in craco.config\n// @ts-ignore\nimport App from \"App\"\n\nimport \"./index.css\"\n\n// todo for static-dashboard:\n// 1) wait for the whole page to load, then render\n// 2) when the whole page is loaded, check window.NETDATA.options set by user and override initial\n// options settings\n\nReactDOM.render(\n <Provider store={store}>\n <App />\n </Provider>,\n document.getElementById(\"root\")\n)\n","import { ChartData, ChartMetadata } from \"../chart-types\"\nimport { seconds4human } from \"./seconds4human\"\n\nexport const LEGEND_BOTTOM_SINGLE_LINE_HEIGHT = 80\n\nexport const legendPluginModuleString = (withContext: boolean, chartMetadata: ChartMetadata) => {\n let str = \" \"\n let context = \"\"\n\n if (withContext && typeof chartMetadata.context === \"string\") {\n // eslint-disable-next-line prefer-destructuring\n context = chartMetadata.context\n }\n\n if (typeof chartMetadata.plugin === \"string\" && chartMetadata.plugin !== \"\") {\n str = chartMetadata.plugin\n\n if (str.endsWith(\".plugin\")) {\n str = str.substring(0, str.length - 7)\n }\n\n if (typeof chartMetadata.module === \"string\" && chartMetadata.module !== \"\") {\n str += `:${chartMetadata.module}`\n }\n\n if (withContext && context !== \"\") {\n str += `, ${context}`\n }\n } else if (withContext && context !== \"\") {\n str = context\n }\n return str\n}\n\nexport const legendResolutionTooltip = (chartData: ChartData, chartMetadata: ChartMetadata) => {\n const collected = chartMetadata.update_every\n // todo if there's no data (but maybe there wont be situation like this), then use \"collected\"\n const viewed = chartData.view_update_every\n if (collected === viewed) {\n return `resolution ${seconds4human(collected)}`\n }\n\n return `resolution ${seconds4human(viewed)}, collected every ${seconds4human(collected)}`\n}\n\ntype GetNewSelectedDimensions = (arg: {\n allDimensions: string[],\n selectedDimensions: string[],\n clickedDimensionName: string,\n isModifierKeyPressed: boolean,\n}) => string[]\n\nexport const getNewSelectedDimensions: GetNewSelectedDimensions = ({\n allDimensions,\n selectedDimensions,\n clickedDimensionName,\n isModifierKeyPressed,\n}) => {\n // when selectedDimensions is empty, then all dimensions should be enabled\n // let's narrow this case now\n const enabledDimensions = selectedDimensions.length === 0 ? allDimensions : selectedDimensions\n const isCurrentlySelected = enabledDimensions.includes(clickedDimensionName)\n\n let newSelectedDimensions: string[]\n if (!isModifierKeyPressed\n && ((isCurrentlySelected && enabledDimensions.length > 1) || !isCurrentlySelected)\n ) {\n newSelectedDimensions = [clickedDimensionName]\n } else if (isCurrentlySelected) { // modifier key pressed\n newSelectedDimensions = enabledDimensions.filter(\n (dimension) => dimension !== clickedDimensionName,\n )\n } else { // modifier key pressed\n newSelectedDimensions = enabledDimensions.concat(clickedDimensionName)\n }\n\n if (newSelectedDimensions.length === allDimensions.length) {\n return []\n }\n return newSelectedDimensions\n}\n","import { useMemo } from \"react\"\n\nimport { useSelector } from \"store/redux-separate-context\"\nimport { selectTimezoneSetting } from \"domains/global/selectors\"\n\nconst zeropad = (x: number) => {\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: Date | number) => (typeof d === \"number\"\n ? new Date(d)\n : d\n)\n// these are the old netdata functions\n// we fallback to these, if the new ones fail\nexport const localeDateStringNative = (d: Date | number) => narrowToDate(d).toLocaleDateString()\nexport const localeTimeStringNative = (d: Date | number) => narrowToDate(d).toLocaleTimeString()\nexport const xAxisTimeStringNative = (d: Date | number) => {\n const date = narrowToDate(d)\n return `${zeropad(date.getHours())}:${\n zeropad(date.getMinutes())}:${\n zeropad(date.getSeconds())}`\n}\n\n\nexport const isProperTimezone = (timeZone: string): boolean => {\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 useDateTime = () => {\n const timezone = useSelector(selectTimezoneSetting)\n const isUsingTimezone = timezone !== \"\" && timezone !== \"default\"\n\n const localeDateString = useMemo(() => {\n const dateOptions = {\n localeMatcher: \"best fit\",\n formatMatcher: \"best fit\",\n weekday: \"short\",\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n timeZone: isUsingTimezone ? timezone : undefined,\n }\n const dateFormat = () => new Intl.DateTimeFormat(navigator.language, dateOptions)\n return isSupportingDateTimeFormat\n ? (d: Date | number) => dateFormat().format(d)\n : localeDateStringNative\n }, [timezone, isUsingTimezone])\n\n\n const localeTimeString = useMemo(() => {\n const timeOptions = {\n localeMatcher: \"best fit\",\n hour12: false,\n formatMatcher: \"best fit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZone: isUsingTimezone ? timezone : undefined,\n timeZoneName: isUsingTimezone ? \"short\" : undefined,\n }\n const timeFormat = () => new Intl.DateTimeFormat(navigator.language, timeOptions)\n return isSupportingDateTimeFormat\n ? (d: Date | number) => timeFormat().format(d)\n : localeTimeStringNative\n }, [timezone, isUsingTimezone])\n\n\n const xAxisTimeString = useMemo(() => {\n const xAxisOptions = {\n localeMatcher: \"best fit\",\n hour12: false,\n formatMatcher: \"best fit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n timeZone: isUsingTimezone ? timezone : undefined,\n }\n const xAxisFormat = () => new Intl.DateTimeFormat(navigator.language, xAxisOptions)\n return isSupportingDateTimeFormat\n ? (d: Date | number) => xAxisFormat().format(d)\n : xAxisTimeStringNative\n }, [timezone, isUsingTimezone])\n\n\n const xAxisDateString = useMemo(() => {\n const xAxisOptions = {\n localeMatcher: \"best fit\",\n hour12: false,\n formatMatcher: \"best fit\",\n day: \"2-digit\",\n month: \"2-digit\",\n timeZone: isUsingTimezone ? timezone : undefined,\n }\n const xAxisFormat = () => new Intl.DateTimeFormat(navigator.language, xAxisOptions)\n return isSupportingDateTimeFormat\n ? (d: Date | number) => xAxisFormat().format(d)\n : xAxisTimeStringNative\n }, [timezone, isUsingTimezone])\n\n return {\n localeDateString,\n localeTimeString,\n xAxisDateString,\n xAxisTimeString,\n }\n}\n","export const isMainJs = process.env.REACT_APP_IS_MAIN_DASHBOARD\nexport const isTestingEnv = process.env.NODE_ENV === \"test\"\nexport const isDevelopmentEnv = process.env.NODE_ENV === \"development\"\n","export const storeKey = \"dashboard\"\n","import { createContext } from \"react\"\nimport {\n createDispatchHook, createSelectorHook, ReactReduxContextValue,\n useSelector as useSelectorOriginal,\n useDispatch as useDispatchOriginal,\n} from \"react-redux\"\n\nconst shouldUseDefaultContext = process.env.REACT_APP_SHOULD_USE_DEFAULT_CONTEXT\n\nexport const dashboardReduxContext = shouldUseDefaultContext\n ? undefined\n : createContext<ReactReduxContextValue>(undefined as any)\n\nexport const useSelector = dashboardReduxContext\n ? createSelectorHook(dashboardReduxContext)\n : useSelectorOriginal\nexport const useDispatch = dashboardReduxContext\n ? createDispatchHook(dashboardReduxContext)\n : useDispatchOriginal\n","import { createAction } from \"redux-act\"\n\n// slightly simplified version of the creator used in the cloud\n// we will unify it when some typing issues will be fixed (cloud version didn't warn on bad payload)\nexport const createRequestAction = <RequestT, SuccessT = any, FailureT = any>(name: string) => {\n const action = createAction<RequestT>(name.toUpperCase())\n\n return Object.assign(action, {\n request: action,\n success: createAction<SuccessT>(\n `${name.toUpperCase()}_SUCCESS`,\n (payload) => payload,\n (meta) => meta,\n ),\n failure: createAction<FailureT>(\n `${name.toUpperCase()}_FAILURE`,\n (payload) => payload,\n (meta) => ({\n ...meta,\n error: true,\n }),\n ),\n })\n}\n"],"sourceRoot":""} \ No newline at end of file