{"version":3,"sources":["webpack:///./node_modules/d3-scale/dist/d3-scale.js","webpack:///./app/components/ScWelcomeScreen/index.js","webpack:///./app/containers/SecurityCenter/actions.js","webpack:///./app/components/SecurityCenterResourceCard/index.js","webpack:///./app/containers/SecurityCenter/ResourcesList.js","webpack:///./app/containers/SecurityCenter/FilterVis.js","webpack:///./app/containers/SecurityCenter/processData.js","webpack:///./app/containers/SecurityCenter/sagas.js","webpack:///./app/containers/SecurityCenter/reducer.js","webpack:///./app/components/StackedBarTimeSeries/index.js","webpack:///./app/components/HeatMap/HeatMapWithTotals.js","webpack:///./app/components/HeatMap/index.js","webpack:///./app/containers/SecurityCenter/OverviewVis.js","webpack:///./app/containers/SecurityCenter/index.js"],"names":["exports","d3Collection","d3Array","d3Interpolate","d3Format","d3Time","d3TimeFormat","initRange","domain","range","arguments","length","this","initInterpolator","interpolator","array","Array","prototype","map","slice","implicit","name","ordinal","index","unknown","scale","d","key","i","get","set","push","_","n","has","call","copy","apply","band","step","bandwidth","undefined","ordinalRange","round","paddingInner","paddingOuter","align","rescale","reverse","start","stop","Math","max","floor","values","rangeRound","padding","min","number","x","unit","identity","normalize","a","b","isNaN","NaN","clamper","t","bimap","interpolate","d0","d1","r0","r1","polymap","j","r","bisect","source","target","clamp","transformer","transform","untransform","piecewise","output","input","invert","y","interpolateNumber","interpolateRound","u","continuous","tickFormat","count","specifier","precision","tickStep","formatSpecifier","type","value","abs","precisionPrefix","formatPrefix","precisionRound","precisionFixed","format","linearish","ticks","nice","i0","i1","tickIncrement","ceil","interval","x0","x1","transformLog","log","transformExp","exp","transformLogn","transformExpn","pow10","isFinite","reflect","f","loggish","logs","pows","base","E","log10","log2","logp","pow","powp","v","p","k","z","Infinity","transformSymlog","c","sign","log1p","transformSymexp","expm1","symlogish","constant","transformPow","exponent","transformSqrt","sqrt","transformSquare","powish","durationSecond","durationMinute","durationHour","durationDay","durationWeek","durationMonth","durationYear","date","Date","number$1","calendar","year","month","week","day","hour","minute","second","millisecond","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","tickIntervals","tickInterval","bisector","right","every","t0","t1","transformer$1","k10","copy$1","sequentialPow","transformer$2","t2","k21","x2","divergingPow","scaleBand","scalePoint","pointish","scaleIdentity","identity$1","scaleLinear","linear","scaleLog","scaleSymlog","symlog","scaleOrdinal","scaleImplicit","scalePow","scaleSqrt","scaleQuantile","quantile","thresholds","invertExtent","indexOf","sort","ascending","quantiles","scaleQuantize","quantize","scaleThreshold","threshold","scaleTime","timeYear","timeMonth","timeWeek","timeDay","timeHour","timeMinute","timeSecond","timeMillisecond","timeFormat","scaleUtc","utcYear","utcMonth","utcWeek","utcDay","utcHour","utcMinute","utcSecond","utcMillisecond","utcFormat","UTC","scaleSequential","sequential","scaleSequentialLog","sequentialLog","scaleSequentialPow","scaleSequentialSqrt","scaleSequentialSymlog","sequentialSymlog","scaleSequentialQuantile","sequentialQuantile","scaleDiverging","diverging","scaleDivergingLog","divergingLog","scaleDivergingPow","scaleDivergingSqrt","scaleDivergingSymlog","divergingSymlog","Object","defineProperty","factory","Icon","fa","WithoutPermission","permissionName","ScWelcomeScreen","styles","header","fontSize","color","display","textAlign","fontWeight","marginBottom","description","margin","sampleFilter","subtitle","list","listStyleType","style","WithPermission","TextLink","to","pathname","clearSelectedResourceId","createAction","SET_FILTER","CLEAR_SELECTED_RESOURCE_ID","setSelectedResourceId","SET_SELECTED_RESOURCE_ID","setSelectedSwimlaneName","SET_SELECTED_SWIMLANE_NAME","disableResourceMonitoring","DISABLE_RESOURCE_MONITORING","enableResourceMonitoring","ENABLE_RESOURCE_MONITORING","fetchRollupData","FETCH_ROLLUP_DATA","fetchCategoryRollupData","FETCH_CATEGORY_ROLLUP_DATA","setCategoryRollupData","SET_CATEGORY_ROLLUP_DATA","setTimelineRollupData","SET_TIMELINE_ROLLUP_DATA","setVisFilters","SET_VIS_FILTERS","setSelectedCategory","SET_SELECTED_CATEGORY","toggleSCInfoModal","TOGGLE_SC_INFO_MODAL","setSelectedSeverity","SET_SELECTED_SEVERITY","setStatusFilter","SET_SELECTED_RESOURCE","SET_STATUS_FILTER","SecurityCenterResourceCard","props","container","width","animation","card","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","cursor","banner","gridArea","gridColumnGap","boxShadow","bannerIcon","height","bannerName","overflow","textOverflow","whiteSpace","bannerManu","alertBanner","maxHeight","borderBottomRightRadius","borderBottomLeftRadius","transition","tags","paddingBottom","paddingTop","tag","marginTop","marginLeft","propKey","propValue","dropdownItem","border","notices","inactiveText","letterSpacing","backgroundColor","borderRadius","textTransform","inactive","background","justifyContent","highestAlertSeverity","resource","roundedLevel","getAlertLevelColor","highestAlertSeverityCategory","SEVERITY_CATEGORIES","HIGH","account","CloudAccount","accountId","lastAlertDate","alertDate","exists","moment","sortProperty","fontStyle","tagSet","keyvalue","split","Tag","fromJS","tagHeight","setState","toggle","disableMonitoring","enableMonitoring","selectedResourceRef","React","createRef","state","srn","selectedResourceSrn","current","scrollIntoView","friendlyName","active","__typename","sonraiConfig","getTags","isMonitored","includes","showNoMonitorBanner","isCrmType","resourceName","getNameFromSrn","ref","onClick","selectCard","BorderedCard","getBannerColor","getBannerTextColor","title","getIconMapping","faIcon","DropdownActions","borderless","handleDisableMonitoring","disabled","handleEnableMonitoring","propsCont","getLastAlertInfo","flexWrap","Alert","PureComponent","ResourcesList","toJS","handleResourceSelect","selectedResourceId","resources","loading","renderResource","Component","FilterVis","filters","newFilters","Map","isEmpty","nav","getNodeViewPushParams","getTypeFromSrn","listcolumn","resourcelist","preFilterPill","marginRight","size","SectionHeader","small","resourcesLoading","Scrollable","toList","getTitle","close","BorderlessButton","RapSheet","location","resourceId","selectedSwimlaneName","onFilterChange","preFilters","visFilters","setDateFilter","selectedCategory","mapStateToProps","createStructuredSelector","selectResources","selectResourcesLoading","selectSelectedResourceId","selectSelectedSwimlaneName","selectSelectedCategory","withConnect","connect","dispatch","bindActionCreators","compose","countsBySwimlane","tickets","swimlanes","groupedBySwimlane","groupBy","ticket","swimlaneSrns","isArray","find","swimlane","keys","forEach","swimlaneName","ticketsArr","first","countsByCategoryAndSwimlane","withExpandedSwimlanes","expandSwimlanes","countsBySwimlaneAndCategory","groupedByCategory","ticketType","ticketKey","grouped","categoryName","categoryTickets","sample","reduce","sum","ticketsDuplicatedBySwimlane","swimlaneSRNs","shift","duplicateTicket","concat","getRollupsForSwimlaneByCategory","getRollupsForSeverityBySwimlane","securityCenterSaga","action","payload","client","getClient","mutate","mutation","gql","put","updateRapsheetResourceMonitor","all","getStatus","defValue","TICKET_STATUS","NEW","IN_PROGRESS","status","getSeverityCategory","severityCategory","query","forceFetch","fetchPolicy","categoryRollups","data","totals","items","rollup","Error","select","selectPolicies","controlPolicies","selectControlGroups","controlFrameworks","selectSwimlanes","policiesToControlFrameworks","mapPoliciesToControlFrameworks","rollup_01","rollup_02","dataWithSwimlanes","console","error","timelineRollup","TicketRollups","bySeverityCategory","takeEvery","takeLatest","initialState","bulkDisablingMonitoring","selectedSeverity","severity","cloud","label","activeFilter","view","VIEWS","VIS","categoryRollupData","categorySeriesTotals","timelineRollupData","loadingRollupData","category","timeline","scInfoModal","selectedResource","isLoading","securityCenterReducer","handleActions","BULK_DISABLE_MONITORING","BULK_DISABLE_MONITORING_SUCCESS","setIn","filterType","BounceLoadingAnimation","EmptyWidgetResults","StackedBarTimeSeries","hiddenLegend","legend","chart","preSelectedSeries","series","hideSeries","focusedSeries","seriesIndex","resetSeries","currentState","newFocusedSeries","onClickBar","swimlaneTitles","seriesCopy","dataMappedToSwimlaneSRNs","swimlaneTitle","simwlaneSrn","dataSetKeys","obj","chain","flatten","uniq","swimlaneReverseLookupMap","keyBy","valueSeq","warn","filter","categories","getCategories","getData","oldProps","isEqual","CenterContent","legendPosition","id","onClickLegend","ChartLegendEntry","colors","options","stacked","toolbar","show","zoom","enabled","events","zoomed","onSelectAndZoom","mounted","onMount","selection","dataLabels","plotOptions","bar","horizontal","shadeIntensity","xaxis","stripTags","fill","opacity","defaultProps","HeatMap","hoveredData","hoveredSeries","hoveredCategory","hoveringHint","trimmedValue","categoryNameMap","substr","onClickCategoryLabel","textAnchor","onMouseEnter","onMouseLeave","onClickSeriesLabel","dy","yAxisTotals","seriesTotalsOverrides","theme","secondary","seriesTotal","config","colorType","val","colorRange","alpha","rgb","string","xAxisTotals","categoryTotalsOverrides","xValues","total","displayValue","vals","conf","primary","square","totalSeriesName","row","emptyColor","opacityRange","datapoint","success","desaturate","lighten","hex","seriesTotals","getVerticalBarData","xAxisHoverValue","getHorizontalBarData","yAxisHoverValue","xType","xDomain","yType","yDomain","top","left","bottom","orientation","formatXTick","formatYTick","stroke","strokeWidth","getHeatmapData","onValueMouseOver","onValueMouseOverHeatmap","onValueMouseOut","onValueMouseOutHeatmap","onValueClick","onValueClickHeatmap","ChartTooltip","onHover","onHoverHint","onEndHover","onLeaveHint","vertical","themeable","showTotals","HeatMapWithTotals","tickLabelAngle","SizedHeatMap","sizeMe","Heatmap","className","OverviewVis","wrapper","gridRowGap","overflowX","wrapperNoGlobal","heatmap","barchart","setSeverity","cfMap","cf","accessibleSwombos","swimlanesKeyedProperly","cfSrns","intersection","swimlaneCountMap","swimlaneSrn","List","update","LOW","getBarDataForSeverity","MEDIUM","sortBy","toLowerCase","dataByCategory","rollupVal","yValue","swimmiesForCF","getIn","contains","riskGrade","sorted","GLOBAL_SWIMLANE_NAME","setFilters","swimlaneCount","heightForFewSwimlanes","xAxisHeight","heightForManySwimlanes","showTimeline","numCategories","globalTotals","categoryTotalMap","getSwimlaneHeatmapData","globalData","userHasGlobal","getAlertLevelColorHML","onClickHeatmap","getGlobalValuesByCategory","timelineData","getBarData","preselectedSeries","onClickTimelineBar","getCategoryNameMap","getWrapperStyle","getHeatmapStyle","renderHeatmap","renderTimeline","selectControlFrameworksForUser","selectSwimlanesBySrn","selectCategoryRollupData","selectLoadingRollupData","selectTimelineRollupData","selectCategorySeriesTotals","LoadingAnim","ModalBody","SecurityCenter","resizing","clearTimeout","resizeTimer","setTimeout","qs","parse","search","rest","setSecurityCenterWelcomeModal","currentParams","stringify","RESOURCES","newView","titleParts","Pill","controlGroups","Tooltip","trigger","anchor","neutralMedium","tooltipContent","tooltip","position","dropdown","item","handleFilterStatus","isOpen","oldState","getDropDownItems","content","pageTitle","getHelpIcon","getStatusFilter","getFilters","dateFilter","renderVisFilters","actionButtons","Button","outline","toggleView","setDateRange","renderVis","renderBoard","flexDirection","hasPermission","userHasPermission","checkUrl","loadedControlGroups","loadedPolicies","showWelcome","window","localStorage","getItem","removeEventListener","updateDimensions","addEventListener","alignItems","userProfile","renderView","Modal","handleWelcomeModal","minWidth","ModalFooter","selectLoadedControlGroups","selectLoadedPolicies","selectSelectedSeverity","selectUserProfile","selectView","selectVisFilters","selectSCInfoModal","selectSelectedResource","selectStatus","withReducer","injectReducer","reducer","withSaga","injectSaga","saga","scSaga","permissionChecker"],"mappings":"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","file":"42.b4a4b2a0d4aba59024a9.chunk.js","sourcesContent":["// https://d3js.org/d3-scale/ v2.2.2 Copyright 2019 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-collection'), require('d3-array'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format')) :\ntypeof define === 'function' && define.amd ? define(['exports', 'd3-collection', 'd3-array', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format'], factory) :\n(factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));\n}(this, (function (exports,d3Collection,d3Array,d3Interpolate,d3Format,d3Time,d3TimeFormat) { 'use strict';\n\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n\nvar array = Array.prototype;\n\nvar map = array.map;\nvar slice = array.slice;\n\nvar implicit = {name: \"implicit\"};\n\nfunction ordinal() {\n var index = d3Collection.map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = d3Collection.map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = d3Array.range(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\nfunction constant(x) {\n return function() {\n return x;\n };\n}\n\nfunction number(x) {\n return +x;\n}\n\nvar unit = [0, 1];\n\nfunction identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = d3Array.bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction transformer() {\n var domain = unit,\n range = unit,\n interpolate = d3Interpolate.interpolate,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), d3Interpolate.interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nfunction continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = d3Array.tickStep(start, stop, count),\n precision;\n specifier = d3Format.formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;\n return d3Format.formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return d3Format.format(specifier);\n}\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = d3Array.tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = d3Array.tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = d3Array.tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n\nfunction identity$1(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity$1(domain).unknown(unknown);\n };\n\n domain = arguments.length ? map.call(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n\nfunction nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nfunction loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = d3Format.format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nfunction log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nfunction symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nfunction symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nfunction pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n\nfunction quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[d3Array.bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(d3Array.ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[d3Array.bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n\nfunction threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[d3Array.bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number$1(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(d3Array.tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number$1)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nfunction time() {\n return initRange.apply(calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\nfunction utcTime() {\n return initRange.apply(calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\nfunction transformer$1() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction copy$1(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction sequential() {\n var scale = linearish(transformer$1()(identity));\n\n scale.copy = function() {\n return copy$1(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n var scale = loggish(transformer$1()).domain([1, 10]);\n\n scale.copy = function() {\n return copy$1(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n var scale = symlogish(transformer$1());\n\n scale.copy = function() {\n return copy$1(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n var scale = powish(transformer$1());\n\n scale.copy = function() {\n return copy$1(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction sequentialQuantile() {\n var domain = [],\n interpolator = identity;\n\n function scale(x) {\n if (!isNaN(x = +x)) return interpolator((d3Array.bisect(domain, x) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(d3Array.ascending);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction transformer$2() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n return scale;\n };\n}\n\nfunction diverging() {\n var scale = linearish(transformer$2()(identity));\n\n scale.copy = function() {\n return copy$1(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n var scale = loggish(transformer$2()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy$1(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n var scale = symlogish(transformer$2());\n\n scale.copy = function() {\n return copy$1(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n var scale = powish(transformer$2());\n\n scale.copy = function() {\n return copy$1(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\nexports.scaleBand = band;\nexports.scalePoint = point;\nexports.scaleIdentity = identity$1;\nexports.scaleLinear = linear;\nexports.scaleLog = log;\nexports.scaleSymlog = symlog;\nexports.scaleOrdinal = ordinal;\nexports.scaleImplicit = implicit;\nexports.scalePow = pow;\nexports.scaleSqrt = sqrt;\nexports.scaleQuantile = quantile;\nexports.scaleQuantize = quantize;\nexports.scaleThreshold = threshold;\nexports.scaleTime = time;\nexports.scaleUtc = utcTime;\nexports.scaleSequential = sequential;\nexports.scaleSequentialLog = sequentialLog;\nexports.scaleSequentialPow = sequentialPow;\nexports.scaleSequentialSqrt = sequentialSqrt;\nexports.scaleSequentialSymlog = sequentialSymlog;\nexports.scaleSequentialQuantile = sequentialQuantile;\nexports.scaleDiverging = diverging;\nexports.scaleDivergingLog = divergingLog;\nexports.scaleDivergingPow = divergingPow;\nexports.scaleDivergingSqrt = divergingSqrt;\nexports.scaleDivergingSymlog = divergingSymlog;\nexports.tickFormat = tickFormat;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/**\n *\n * ScWelcomeScreen\n *\n */\n\nimport React from 'react'\nimport TextLink from 'components/TextLink'\nimport Icon from 'components/Icon'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport WithoutPermission from 'containers/PermissionChecker/WithoutPermission'\n\nfunction ScWelcomeScreen() {\n const styles = {\n base: {\n padding: '1rem 1.5rem',\n },\n header: {\n fontSize: '30px',\n color: '#373835',\n display: 'block',\n textAlign: 'center',\n fontWeight: '300',\n marginBottom: '0.25rem',\n },\n description: {\n fontSize: '17px',\n fontWeight: '300',\n margin: '10px 0px',\n },\n sampleFilter: {\n fontWeight: '300',\n margin: '0.5rem',\n },\n subtitle: {\n fontSize: '17px',\n fontWeight: '400',\n },\n list: {\n listStyleType: 'disc',\n padding: '0rem 2rem',\n },\n }\n return (\n
\n
Security Center
\n
\n
\n Swimlanes allows users to group cloud resources into functional areas,\n based resource names/patterns, tags or cloud accounts, even across\n different cloud environments. Group critical assets together to\n prioritize issues that affect these resources, from the larger scope\n of information, for faster issue identification, resolution, and\n reduction of risk in these areas.\n
\n
\n All data in your cloud accounts will be present in the\n "Global" Swimlane (at the bottom of the table), with other\n swimlanes listed above it. You can filter by a specific swimlane by\n selecting it on the vertical axis, by a specific control framework by\n selecting it on the horizontal axis, or a single swimlane & framework\n list of entries by selecting that entry from the table grid.\n
\n
\n \n
\n To define your swimlanes, select{' '}\n \n Manage Swimlanes\n {' '}\n here or from the lower left menu.\n
\n
\n \n
\n To define swimlanes you must be assigned a role with swimlane.edit\n permissions.\n
\n
\n
\n
\n
\n )\n}\n\nexport default ScWelcomeScreen\n","/*\n *\n * SecurityCenter actions\n *\n */\n\nimport {\n SET_SELECTED_RESOURCE_ID,\n CLEAR_SELECTED_RESOURCE_ID,\n SET_FILTER,\n SET_SELECTED_SWIMLANE_NAME,\n DISABLE_RESOURCE_MONITORING,\n ENABLE_RESOURCE_MONITORING,\n FETCH_ROLLUP_DATA,\n SET_CATEGORY_ROLLUP_DATA,\n SET_TIMELINE_ROLLUP_DATA,\n SET_VIS_FILTERS,\n SET_SELECTED_CATEGORY,\n TOGGLE_SC_INFO_MODAL,\n SET_SELECTED_SEVERITY,\n FETCH_CATEGORY_ROLLUP_DATA,\n SET_SELECTED_RESOURCE,\n SET_STATUS_FILTER,\n} from './constants'\nimport { createAction } from 'redux-actions'\n\nexport const setFilter = createAction(SET_FILTER)\nexport const clearSelectedResourceId = createAction(CLEAR_SELECTED_RESOURCE_ID)\nexport const setSelectedResourceId = createAction(SET_SELECTED_RESOURCE_ID)\nexport const setSelectedSwimlaneName = createAction(SET_SELECTED_SWIMLANE_NAME)\n\nexport const disableResourceMonitoring = createAction(\n DISABLE_RESOURCE_MONITORING\n)\nexport const enableResourceMonitoring = createAction(ENABLE_RESOURCE_MONITORING)\n\nexport const fetchRollupData = createAction(FETCH_ROLLUP_DATA)\nexport const fetchCategoryRollupData = createAction(FETCH_CATEGORY_ROLLUP_DATA)\nexport const setCategoryRollupData = createAction(SET_CATEGORY_ROLLUP_DATA)\nexport const setTimelineRollupData = createAction(SET_TIMELINE_ROLLUP_DATA)\n\nexport const setVisFilters = createAction(SET_VIS_FILTERS)\nexport const setSelectedCategory = createAction(SET_SELECTED_CATEGORY)\nexport const toggleSCInfoModal = createAction(TOGGLE_SC_INFO_MODAL)\nexport const setSelectedSeverity = createAction(SET_SELECTED_SEVERITY)\n\nexport const setSelectedResource = createAction(SET_SELECTED_RESOURCE)\n\nexport const setStatusFilter = createAction(SET_STATUS_FILTER)\n","/**\n *\n * SecurityCenterResourceCard\n *\n */\n\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { fromJS } from 'immutable'\nimport { Alert } from 'reactstrap'\n\nimport DropdownActions, {\n DropdownAnchor,\n DropdownMenu,\n DropdownItem,\n} from 'components/DropdownActions'\n\nimport BorderedCard from 'components/BorderedCard'\nimport CloudAccount from 'components/CloudAccount'\nimport Icon from 'components/Icon'\nimport Tag from 'components/Tag'\nimport { getAlertLevelColor } from 'utils/widgetUtils'\nimport {\n getIconMapping,\n isCrmType,\n exists,\n getNameFromSrn,\n} from 'utils/sonraiUtils'\nimport { SEVERITY_CATEGORIES } from 'appConstants'\n\nclass SecurityCenterResourceCard extends React.PureComponent {\n constructor(props) {\n super(props)\n this.selectedResourceRef = React.createRef()\n\n this.state = {\n toggle: false,\n }\n }\n\n componentDidMount() {\n const { srn } = this.props.resource\n const { selectedResourceSrn } = this.props\n if (srn === selectedResourceSrn) {\n this.selectedResourceRef.current.scrollIntoView()\n }\n }\n\n styles = {\n container: {\n margin: '10px',\n width: '360px',\n animation: 'fade-in-top 1s cubic-bezier(0.39, 0.575, 0.565, 1) both',\n },\n card: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '2em auto auto',\n gridTemplateAreas: '\"banner\" \"props\" \"notices\"',\n padding: 0,\n cursor: 'pointer',\n },\n banner: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto',\n gridArea: 'banner',\n gridColumnGap: '0.5em',\n gridTemplateAreas: '\"icon name menu\"',\n boxShadow: '0 2px 4px 0 rgba(0,0,0,0.50)',\n margin: '0.5em -0.5em 0em -0.5em',\n padding: '0 1rem',\n fontWeight: '400',\n },\n bannerIcon: {\n gridArea: 'icon',\n height: '2em',\n },\n bannerName: {\n gridArea: 'name',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n bannerManu: {\n gridArea: 'menu',\n },\n alertBanner: {\n color: '#000000',\n fontSize: '0.75em',\n maxHeight: '25px',\n padding: '0.25em',\n textAlign: 'center',\n borderBottomRightRadius: '4px',\n borderBottomLeftRadius: '4px',\n transition: 'box-shadow 0.2s ease-in-out',\n margin: 0,\n cursor: 'pointer',\n },\n props: {\n gridArea: 'props',\n fontSize: '12px',\n padding: '0.5em',\n overflow: 'hidden',\n },\n tags: {\n fontSize: '12px',\n overflow: 'hidden',\n paddingBottom: '0.5em',\n paddingTop: '0.25em',\n },\n tag: {\n margin: '0em',\n marginTop: '0.18em',\n marginLeft: '0.25em',\n marginBottom: '0.25em',\n fontSize: '12px',\n },\n propKey: {\n fontWeight: '300',\n },\n propValue: {\n fontWeight: '400',\n },\n dropdownItem: {\n padding: '0.5rem',\n width: '100%',\n fontSize: '0.9rem',\n border: 'none',\n },\n notices: {\n gridArea: 'notices',\n },\n inactiveText: {\n fontSize: '14px',\n fontWeight: '500',\n letterSpacing: '1px',\n color: '#DC3545',\n backgroundColor: '#FFF',\n padding: '3px',\n width: '100px',\n borderRadius: '0.8rem',\n textTransform: 'uppercase',\n textAlign: 'center',\n },\n inactive: {\n background: 'rgb(236, 239, 241)',\n width: '100%',\n borderBottomRightRadius: '4px',\n borderBottomLeftRadius: '4px',\n padding: '0.25rem',\n display: 'flex',\n justifyContent: 'center',\n },\n }\n\n getBannerColor = () => {\n const { highestAlertSeverity } = this.props.resource\n\n const roundedLevel = Math.floor(highestAlertSeverity / 10)\n\n return getAlertLevelColor(roundedLevel)\n }\n\n getBannerTextColor = () => {\n const {\n highestAlertSeverity,\n highestAlertSeverityCategory,\n } = this.props.resource\n return highestAlertSeverity >= 80 ||\n highestAlertSeverityCategory === SEVERITY_CATEGORIES.HIGH\n ? '#fff'\n : '#000'\n }\n\n getProps1 = () => {\n const { account } = this.props.resource\n return [\n
\n Account: \n \n \n \n
,\n ]\n }\n\n getLastAlertInfo = () => {\n const {\n highestAlertSeverity,\n highestAlertSeverityCategory,\n lastAlertDate,\n } = this.props.resource\n\n const alertDate = exists(lastAlertDate)\n ? highestAlertSeverityCategory\n ? moment(lastAlertDate).format('ll')\n : moment(lastAlertDate).format('lll')\n : '-'\n\n if (!highestAlertSeverity && !lastAlertDate) {\n return (\n \n (No Alerts recorded for this resoruce)\n \n )\n }\n if (this.props.sortProperty === 'timestamp') {\n return [\n
\n Last Alert Time: \n {alertDate}\n
,\n
\n Alert Severity: \n \n {highestAlertSeverityCategory || highestAlertSeverity}\n \n
,\n ]\n }\n\n return [\n
\n Highest Alert Level: \n \n {highestAlertSeverityCategory || highestAlertSeverity}\n \n
,\n
\n Highest Alert Time: \n {alertDate}\n
,\n ]\n }\n\n getTags = () => {\n return this.props.resource.tagSet\n ? this.props.resource.tagSet.map((keyvalue, index) => {\n const split = keyvalue.split(':')\n\n return (\n \n )\n })\n : undefined\n }\n\n handleDisableMonitoring = () => {\n this.setState({ toggle: false })\n this.props.disableMonitoring(this.props.resource)\n }\n\n handleEnableMonitoring = () => {\n this.setState({ toggle: false })\n this.props.enableMonitoring(this.props.resource)\n }\n\n render() {\n const {\n friendlyName,\n name,\n srn,\n active,\n __typename,\n sonraiConfig,\n } = this.props.resource\n const { selectedResourceSrn } = this.props\n const tags = this.getTags()\n let isMonitored = false\n if (sonraiConfig && sonraiConfig.includes('MONITORED')) {\n isMonitored = true\n }\n const isCrm = isCrmType(srn)\n const showNoMonitorBanner = isCrm && !isMonitored\n const resourceName = friendlyName || name || getNameFromSrn(srn)\n\n return (\n this.props.selectCard(this.props.resource)}\n >\n \n \n
\n \n
\n
\n {resourceName}\n
\n\n
\n \n \n \n \n \n \n Disable Monitoring\n \n \n Enable Monitoring\n \n \n \n
\n \n\n
\n
\n
\n Account: \n \n \n \n
\n {this.getLastAlertInfo()}\n
\n\n
\n \n {tags && tags.slice(0, 5)}\n {tags && tags.length > 5 ? (\n {`+ ${\n tags.length - 5\n } more`}\n ) : undefined}\n \n
\n
\n
\n {showNoMonitorBanner && (\n \n Unmonitored Resource\n \n )}\n {!active && (\n
\n
Inactive
\n
\n )}\n
\n \n \n )\n }\n}\n\nSecurityCenterResourceCard.propTypes = {\n account: PropTypes.string,\n srn: PropTypes.string,\n highestAlertSeverity: PropTypes.number,\n resource: PropTypes.object,\n selectCard: PropTypes.func.isRequired,\n selectedResourceSrn: PropTypes.string,\n disableMonitoring: PropTypes.func,\n enableMonitoring: PropTypes.func,\n sortProperty: PropTypes.string,\n}\n\nexport default SecurityCenterResourceCard\n","import React from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { RectangleShimmer } from 'components/ShimmerLoader'\nimport SecurityCenterResourceCard from 'components/SecurityCenterResourceCard'\n\nexport class ResourcesList extends React.Component {\n handleResourceSelect = resource => {\n this.props.setSelectedResourceId(resource.srn)\n }\n\n handleDisableMonitoring = resource => {\n this.props.disableResourceMonitoring(resource.srn)\n }\n\n handleEnableMonitoring = resource => {\n const { srn } = resource\n this.props.enableResourceMonitoring(srn)\n }\n\n renderResource = resource => {\n return (\n \n )\n }\n\n render() {\n const resources = this.props.resources.sort((a, b) => {\n return b.get('highestAlertSeverity') - a.get('highestAlertSeverity')\n })\n\n if (this.props.loading) {\n return (\n
\n \n
\n \n
\n \n
\n \n
\n )\n }\n\n return (\n
{resources.map(this.renderResource)}
\n )\n }\n}\n\nResourcesList.propTypes = {\n loading: PropTypes.bool,\n resources: ImmutablePropTypes.list.isRequired,\n disableResourceMonitoring: PropTypes.func.isRequired,\n enableResourceMonitoring: PropTypes.func,\n setSelectedResourceId: PropTypes.func.isRequired,\n selectedResourceId: PropTypes.string,\n sortProperty: PropTypes.string,\n}\n\nexport default ResourcesList\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { Link } from 'react-router-dom'\nimport { Map } from 'immutable'\n\nimport BorderlessButton from 'components/BorderlessButton'\nimport Scrollable from 'components/Scrollable'\nimport Icon from 'components/Icon'\nimport RapSheet from 'containers/RapSheet'\nimport BorderedCard from 'components/BorderedCard'\nimport SectionHeader from 'components/SectionHeader'\nimport { getNameFromSrn } from 'utils/sonraiUtils'\nimport { getNodeViewPushParams } from 'utils/sonraiUtils'\nimport { getTypeFromSrn } from 'utils/graphDataUtils'\nimport {\n selectResources,\n selectResourcesLoading,\n} from 'containers/RapSheet/selectors'\nimport {\n disableResourceMonitoring,\n enableResourceMonitoring,\n setVisFilters,\n} from './actions'\nimport {\n selectSelectedResourceId,\n selectSelectedSwimlaneName,\n selectSelectedCategory,\n} from './selectors'\nimport ResourcesList from './ResourcesList'\nexport class FilterVis extends React.Component {\n constructor(props) {\n super(props)\n\n this.styles = {\n base: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gridTemplateAreas: '\"listcolumn resource\"',\n overflow: 'hidden',\n gridColumnGap: '0.5em',\n },\n listcolumn: {\n gridArea: 'listcolumn',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"header\" \"list\"',\n overflow: 'hidden',\n width: '395px',\n },\n resourcelist: {\n gridArea: 'list',\n },\n resource: {\n gridArea: 'resource',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"header\" \"rapsheetcontent\"',\n overflow: 'hidden',\n },\n header: {\n display: 'grid',\n gridTemplateColumns: '1fr auto',\n gridTemplateAreas: '\"title close\"',\n gridArea: 'header',\n },\n title: {\n gridArea: 'title',\n },\n preFilterPill: {\n marginRight: '1em',\n },\n }\n }\n\n onFilterChange = filters => {\n let newFilters = { ...filters }\n\n this.props.setVisFilters(newFilters)\n }\n\n getTitle = () => {\n if (!this.props.selectedResourceId) {\n return null\n }\n\n const resource =\n this.props.resources.get(this.props.selectedResourceId) || Map()\n\n if (resource.isEmpty()) {\n return null\n }\n\n const nav = getNodeViewPushParams(\n this.props.selectedResourceId,\n getTypeFromSrn(this.props.selectedResourceId)\n )\n\n const name =\n resource.get('friendlyName') ||\n resource.get('name') ||\n getNameFromSrn(this.props.selectedResourceId)\n\n return (\n
\n Security Summary for Resource: {name}\n
\n )\n }\n\n render() {\n const size = this.props.resources.size\n return (\n
\n
\n \n {this.props.resourcesLoading\n ? 'Loading Resources...'\n : size >= 100\n ? `Showing the top 100 Resources`\n : `Resources (${this.props.resources.size})`}\n \n \n \n \n
\n\n \n
\n \n {this.getTitle()}\n \n
\n {this.props.selectedResourceId && (\n this.props.setSelectedResourceId(null)}\n title=\"Clear selected resource\"\n >\n \n \n )}\n
\n
\n
\n \n
\n
\n
\n )\n }\n}\n\nFilterVis.propTypes = {\n disableResourceMonitoring: PropTypes.func.isRequired,\n enableResourceMonitoring: PropTypes.func.isRequired,\n resourcesLoading: PropTypes.bool,\n resources: ImmutablePropTypes.iterable.isRequired,\n selectedResourceId: PropTypes.string,\n selectedCategory: PropTypes.string,\n selectedSwimlaneName: PropTypes.string,\n setSelectedResourceId: PropTypes.func.isRequired,\n visFilters: ImmutablePropTypes.map.isRequired,\n setVisFilters: PropTypes.func.isRequired,\n location: PropTypes.any,\n}\n\nconst mapStateToProps = createStructuredSelector({\n resources: selectResources,\n resourcesLoading: selectResourcesLoading,\n selectedResourceId: selectSelectedResourceId,\n selectedSwimlaneName: selectSelectedSwimlaneName,\n selectedCategory: selectSelectedCategory,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n disableResourceMonitoring,\n enableResourceMonitoring,\n setVisFilters,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nexport default compose(withConnect)(FilterVis)\n","import _ from 'lodash'\nimport { Map } from 'immutable'\n\nexport const countsBySwimlane = (tickets, swimlanes) => {\n const groupedBySwimlane = _.groupBy(tickets, ticket => {\n return !ticket.swimlaneSrns || !Array.isArray(ticket.swimlaneSrns)\n ? 'undefined'\n : swimlanes\n .find(\n swimlane => swimlane.get('srn') === ticket.swimlaneSrns[0],\n null,\n Map()\n )\n .get('title') || 'undefined'\n })\n\n const countsBySwimlane = {}\n _.keys(groupedBySwimlane).forEach(swimlaneName => {\n const ticketsArr = groupedBySwimlane[swimlaneName]\n const count = _.get(_.first(ticketsArr), ['riskScore'], 'A')\n countsBySwimlane[swimlaneName] = count\n })\n\n return countsBySwimlane\n}\n\nexport const countsByCategoryAndSwimlane = (tickets, swimlanes) => {\n const withExpandedSwimlanes = expandSwimlanes(tickets)\n const groupedBySwimlane = _.groupBy(withExpandedSwimlanes, ticket => {\n return !ticket.swimlaneSrns || !Array.isArray(ticket.swimlaneSrns)\n ? 'undefined'\n : swimlanes\n .find(\n swimlane => swimlane.get('srn') === ticket.swimlaneSrns[0],\n null,\n Map()\n )\n .get('title') || 'undefined'\n })\n\n const countsBySwimlaneAndCategory = {}\n _.keys(groupedBySwimlane).forEach(swimlaneName => {\n const ticketsArr = groupedBySwimlane[swimlaneName]\n\n const groupedByCategory = _.groupBy(ticketsArr, ticket => {\n if (ticket.ticketType == 'Framework') {\n return ticket.ticketKey\n }\n return ticket.ticketType\n })\n\n let grouped = {}\n\n _.keys(groupedByCategory).forEach(categoryName => {\n const categoryTickets = groupedByCategory[categoryName]\n\n let sample = { ...categoryTickets[0] }\n sample.count = categoryTickets.reduce(\n (sum, ticket) => (sum += ticket.count),\n 0\n )\n grouped[categoryName] = sample\n })\n\n countsBySwimlaneAndCategory[swimlaneName] = grouped\n })\n\n return countsBySwimlaneAndCategory\n}\n\nconst expandSwimlanes = tickets => {\n const ticketsDuplicatedBySwimlane = []\n\n const ticketsWithSingleSwimlane = tickets.map(ticket => {\n if (\n !ticket.swimlaneSRNs ||\n !Array.isArray(ticket.swimlaneSRNs) ||\n !ticket.swimlaneSRNs.length > 1\n ) {\n return ticket\n }\n\n const swimlaneSrns = [...ticket.swimlaneSRNs]\n\n swimlaneSrns.shift()\n swimlaneSrns.forEach(swimlane => {\n const duplicateTicket = { ...ticket }\n duplicateTicket.swimlaneSRNs = [swimlane]\n ticketsDuplicatedBySwimlane.push(duplicateTicket)\n })\n\n ticket.swimlaneSRNs = [ticket.swimlaneSRNs[0]]\n return ticket\n })\n\n return ticketsWithSingleSwimlane.concat(ticketsDuplicatedBySwimlane)\n}\n","import {\n all,\n put,\n takeEvery,\n select,\n takeLatest,\n call,\n} from 'redux-saga/effects'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport gql from 'graphql-tag'\n\nimport { mapPoliciesToControlFrameworks } from 'utils/sonraiUtils'\nimport {\n selectPolicies,\n selectControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\n\nimport { TICKET_STATUS } from 'appConstants'\nimport { updateRapsheetResourceMonitor } from 'containers/RapSheet/actions'\nimport {\n DISABLE_RESOURCE_MONITORING,\n ENABLE_RESOURCE_MONITORING,\n FETCH_ROLLUP_DATA,\n FETCH_CATEGORY_ROLLUP_DATA,\n} from './constants'\nimport { setCategoryRollupData, setTimelineRollupData } from './actions'\n\nimport { countsByCategoryAndSwimlane, countsBySwimlane } from './processData'\n\nfunction* enableResourceMonitoring(action) {\n const srn = action.payload\n const client = getClient()\n yield client.mutate({\n mutation: gql`\n mutation toggleResourceMonitoring {\n setMonitor(monitorStatusBySrn: {srn: \"${srn}\", monitor: true }){\n srn\n monitor\n }\n }\n `,\n })\n\n yield put(updateRapsheetResourceMonitor({ srn, isMonitored: true }))\n}\n\nfunction* disableResourceMonitoring(action) {\n const srn = action.payload\n\n const client = getClient()\n\n yield client.mutate({\n mutation: gql`\n mutation toggleResourceMonitoring {\n setMonitor(monitorStatusBySrn: {srn: \"${srn}\", monitor: false }){\n srn\n monitor\n }\n }\n `,\n })\n\n yield put(updateRapsheetResourceMonitor({ srn, isMonitored: false }))\n}\n\nfunction* fetchRollupData(action) {\n yield all([\n call(getRollupsForSwimlaneByCategory, action),\n call(getRollupsForSeverityBySwimlane, action),\n ])\n}\n\nconst getStatus = payload => {\n const defValue = `status: { op: IN_LIST, values: [\"${TICKET_STATUS.NEW}\", \"${TICKET_STATUS.IN_PROGRESS}\"] }`\n\n if (!payload) {\n return defValue\n }\n const { status } = payload\n if (!status || status === 'OPEN') {\n return defValue\n }\n\n if (status === 'ALL') {\n return `status: { value: \"ALL\"}`\n }\n\n return `status: { op: EQ value: \"${status}\" }`\n}\n\nconst getSeverityCategory = payload => {\n const defValue = `severityCategory: { value: \"ALL\" }`\n if (!payload) {\n return defValue\n }\n const { severityCategory } = payload\n\n if (!severityCategory) {\n return defValue\n }\n\n return `severityCategory: { op: EQ value: \"${severityCategory}\" }`\n}\n\nfunction* getRollupsForSwimlaneByCategory({ payload }) {\n const status = getStatus(payload)\n const severityCategory = getSeverityCategory(payload)\n try {\n const client = getClient()\n const categoryRollups = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n query getRollupsForSwimlaneHeatmap {\n totals: TicketRollups(\n where: {\n ticketKey: { value: \"ALL\" }\n ticketType: { value: \"ALL\" }\n\n resourceLabel: { value: \"ALL\" }\n resourceType: { value: \"ALL\" }\n ${severityCategory}\n actionClassification: { value: \"ALL\" }\n resourceSRN: { value: \"ALL\" }\n orgName: { value: \"ALL\" }\n ${status}\n account: { value: \"ALL\" }\n }\n ) {\n items {\n ticketKey\n ticketType\n status\n resourceSRN\n resourceLabel\n resourceType\n severityCategory\n actionClassification\n count\n swimlaneSrns\n riskScore\n riskScoreNumeric\n }\n }\n rollup_01: TicketRollups(where: {\n resourceSRN: { value: \"ALL\" }\n resourceType: { value: \"ALL\" }\n resourceLabel: { value: \"ALL\" }\n actionClassification: { value: \"ALL\" }\n ${severityCategory}\n ticketKey: { op: NEQ value: \"ALL\" }\n ticketType: { value: \"Framework\" }\n orgName: { value: \"ALL\" }\n account: { value: \"ALL\" }\n ${status}\n }) {\n count\n items(limit: -1) {\n ... all_the_fields\n }\n }\n rollup_02: TicketRollups(where: {\n resourceSRN: { value: \"ALL\" }\n resourceType: { value: \"ALL\" }\n resourceLabel: { value: \"ALL\" }\n actionClassification: { value: \"ALL\" }\n ${severityCategory}\n ticketKey: { value: \"ALL\" }\n ticketType: { op: IN_LIST values: [ \"Access\", \"Activity\", \"Property\" ]}\n orgName: { value: \"ALL\" }\n account: { value: \"ALL\" }\n ${status}\n }) {\n items (limit: -1) {\n ... all_the_fields\n }\n }\n }\n\n fragment all_the_fields on TicketRollup {\n resourceSRN\n ticketKey\n ticketType\n severityCategory\n count\n resourceType\n resourceLabel\n actionClassification\n swimlaneSrns\n riskScore\n riskScoreNumeric\n }\n `,\n })\n\n if (\n // TODO come back to this, these will be null if no data\n // categoryRollups.data.rollup_01.items === null ||\n // categoryRollups.data.rollup_02.items === null ||\n categoryRollups.data.totals.items === null\n ) {\n yield put(setCategoryRollupData({ rollup: [], totals: [] }))\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const controlPolicies = yield select(selectPolicies)\n const controlFrameworks = yield select(selectControlGroups)\n const swimlanes = yield select(selectSwimlanes)\n\n const policiesToControlFrameworks = mapPoliciesToControlFrameworks(\n [\n ...(categoryRollups.data.rollup_01.items ?? []),\n ...(categoryRollups.data.rollup_02.items ?? []),\n ],\n controlPolicies,\n controlFrameworks\n )\n const dataWithSwimlanes = countsByCategoryAndSwimlane(\n policiesToControlFrameworks,\n swimlanes\n )\n\n const totals = countsBySwimlane(\n categoryRollups.data.totals.items,\n swimlanes\n )\n\n yield put(\n setCategoryRollupData({ rollup: dataWithSwimlanes, totals: totals })\n )\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading rollup data for swimlanes by category', e)\n }\n}\n\nexport function* getRollupsForSeverityBySwimlane({ payload }) {\n try {\n const client = yield getClient()\n const status = getStatus(payload)\n\n const timelineRollup = yield client.query({\n forceFetch: true,\n fetchPolicy: 'no-cache',\n query: gql`\n query getRollupsForTimeline {\n TicketRollups(\n where: {\n ticketType: { value: \"ALL\" }\n resourceSRN: { value: \"ALL\" }\n severityCategory: { op: NEQ, value: \"ALL\" }\n ticketKey: { value: \"ALL\" }\n actionClassification: { value: \"ALL\" }\n resourceType: { value: \"ALL\" }\n resourceLabel: { value: \"ALL\" }\n orgName: { value: \"ALL\" }\n account: { value: \"ALL\" }\n ${status}\n }\n ) {\n count\n items {\n resourceSRN\n ticketType\n ticketKey\n severityCategory\n count\n resourceType\n resourceLabel\n actionClassification\n swimlaneSrns\n status\n riskScore\n riskScoreNumeric\n }\n }\n }\n `,\n })\n\n if (timelineRollup.data.TicketRollups.items === null) {\n throw new Error('Bad formatting of response from server: items is null')\n }\n\n const bySeverityCategory = _.groupBy(\n timelineRollup.data.TicketRollups.items,\n ticket => ticket.severityCategory\n )\n yield put(setTimelineRollupData(bySeverityCategory))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error loading rollup data for severity by time', e)\n }\n}\n\nfunction* securityCenterSaga() {\n yield all([\n takeEvery(DISABLE_RESOURCE_MONITORING, disableResourceMonitoring),\n takeEvery(ENABLE_RESOURCE_MONITORING, enableResourceMonitoring),\n takeLatest(FETCH_ROLLUP_DATA, fetchRollupData),\n takeLatest(FETCH_CATEGORY_ROLLUP_DATA, getRollupsForSwimlaneByCategory),\n ])\n}\n\nexport default securityCenterSaga\n","/*\n *\n * SecurityCenter reducer\n *\n */\n\nimport { fromJS } from 'immutable'\nimport {\n SET_SELECTED_RESOURCE_ID,\n SET_SELECTED_RESOURCE,\n CLEAR_SELECTED_RESOURCE_ID,\n SET_FILTER,\n SET_SELECTED_SWIMLANE_NAME,\n VIEWS,\n SET_CATEGORY_ROLLUP_DATA,\n SET_TIMELINE_ROLLUP_DATA,\n FETCH_ROLLUP_DATA,\n SET_VIS_FILTERS,\n SET_SELECTED_CATEGORY,\n TOGGLE_SC_INFO_MODAL,\n SET_SELECTED_SEVERITY,\n BULK_DISABLE_MONITORING_SUCCESS,\n BULK_DISABLE_MONITORING,\n SET_STATUS_FILTER,\n} from './constants'\nimport { handleActions } from 'redux-actions'\n\nconst initialState = fromJS({\n bulkDisablingMonitoring: false,\n resources: undefined,\n selectedResourceId: undefined,\n selectedSwimlaneName: undefined,\n selectedCategory: undefined,\n selectedSeverity: undefined,\n filters: {\n severity: [],\n cloud: [],\n sort: { label: 'Severity', value: 'severity' },\n activeFilter: { label: 'Only Active Resources', value: 'onlyAR' },\n },\n view: VIEWS.VIS,\n categoryRollupData: [],\n categorySeriesTotals: {},\n timelineRollupData: [],\n loadingRollupData: fromJS({ category: false, timeline: false }),\n visFilters: {},\n scInfoModal: false,\n selectedResource: {\n resource: {},\n isLoading: false,\n },\n status: 'OPEN',\n})\n\nconst securityCenterReducer = handleActions(\n {\n [BULK_DISABLE_MONITORING]: state =>\n state.set('bulkDisablingMonitoring', true),\n [BULK_DISABLE_MONITORING_SUCCESS]: state =>\n state.set('bulkDisablingMonitoring', false),\n [FETCH_ROLLUP_DATA]: state =>\n state\n .setIn(['loadingRollupData', 'category'], true)\n .setIn(['loadingRollupData', 'timeline'], true),\n [SET_CATEGORY_ROLLUP_DATA]: (state, { payload }) =>\n state\n .setIn(['loadingRollupData', 'category'], false)\n .set('categoryRollupData', fromJS(payload.rollup))\n .set('categorySeriesTotals', fromJS(payload.totals)),\n [SET_TIMELINE_ROLLUP_DATA]: (state, { payload }) =>\n state\n .setIn(['loadingRollupData', 'timeline'], false)\n .set('timelineRollupData', fromJS(payload)),\n [SET_FILTER]: (state, { payload }) =>\n state.setIn(['filters', payload.filterType], fromJS(payload.value)),\n [SET_SELECTED_RESOURCE_ID]: (state, { payload }) => {\n if (payload) {\n return state\n .set('selectedResourceId', payload)\n .setIn(['selectedResource', 'isLoading'], true)\n } else {\n return state\n .set('selectedResourceId', payload)\n .set('selectedResource', initialState.get('selectedResource'))\n }\n },\n [SET_SELECTED_RESOURCE]: (state, { payload }) =>\n state\n .setIn(['selectedResource', 'isLoading'], false)\n .setIn(['selectedResource', 'resource'], fromJS(payload)),\n\n [SET_SELECTED_SWIMLANE_NAME]: (state, { payload }) =>\n state.set('selectedSwimlaneName', payload),\n [SET_SELECTED_CATEGORY]: (state, { payload }) =>\n state.set('selectedCategory', payload),\n [SET_SELECTED_SEVERITY]: (state, { payload }) =>\n state.set('selectedSeverity', payload),\n [SET_STATUS_FILTER]: (state, { payload }) => state.set('status', payload),\n [CLEAR_SELECTED_RESOURCE_ID]: state =>\n state\n .set('selectedResourceId', undefined)\n .set('selectedSwimlaneName', undefined)\n .set('selectedResource', initialState.get('selectedResource')),\n [SET_VIS_FILTERS]: (state, { payload }) =>\n state.set('visFilters', fromJS(payload)),\n [TOGGLE_SC_INFO_MODAL]: state =>\n state.set('scInfoModal', !state.get('scInfoModal')),\n },\n initialState\n)\n\nexport default securityCenterReducer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map } from 'immutable'\nimport _ from 'lodash'\nimport ApexChart from 'react-apexcharts'\n\nimport { exists } from 'utils/sonraiUtils'\nimport BorderlessButton from 'components/BorderlessButton'\nimport BounceLoadingAnimation from 'components/BounceLoadingAnimation'\nimport CenterContent from 'components/CenterContent'\nimport EmptyWidgetResults from 'components/EmptyWidgetResults'\nimport ChartLegendEntry from 'components/ChartLegendEntry'\nimport { stripTags } from 'utils/sonraiUtils'\nexport class StackedBarTimeSeries extends React.Component {\n styles = {\n hiddenLegend: {\n color: '#ccc',\n cursor: 'pointer',\n },\n legend: {\n color: '#000',\n },\n }\n\n constructor(props) {\n super(props)\n\n const categories = this.getCategories(props.data)\n this.state = {\n categories: categories,\n series: this.getData(props.data, categories),\n focusedSeries: null,\n }\n\n this.chart = null\n }\n\n onMount = chart => {\n this.chart = chart\n if (this.props.preSelectedSeries) {\n this.state.series.forEach((series, index) => {\n if (series.name !== this.props.preSelectedSeries) {\n chart.hideSeries(series.name)\n } else {\n this.setState({\n focusedSeries: index,\n })\n }\n })\n }\n }\n\n componentDidUpdate(oldProps) {\n if (!_.isEqual(oldProps.data, this.props.data)) {\n const categories = this.getCategories(this.props.data)\n\n this.setState({\n categories: categories,\n series: this.getData(this.props.data, categories),\n })\n }\n }\n\n onClickLegend = seriesIndex => {\n this.chart.resetSeries()\n\n if (this.state.focusedSeries !== seriesIndex) {\n this.state.series.forEach((series, index) => {\n if (index !== seriesIndex) {\n this.chart.hideSeries(series.name)\n }\n })\n }\n\n this.setState(currentState => {\n const newFocusedSeries =\n currentState.focusedSeries === seriesIndex ? null : seriesIndex\n\n if (this.props.onClickBar) {\n if (newFocusedSeries !== null) {\n this.props.onClickBar({\n seriesIndex,\n series: currentState.series[seriesIndex],\n })\n } else {\n this.props.onClickBar({\n seriesIndex: null,\n series: null,\n })\n }\n }\n\n return {\n focusedSeries: newFocusedSeries,\n }\n })\n }\n\n getData = (data, swimlaneTitles) => {\n return data.map(series => {\n const seriesCopy = { ...series }\n const dataMappedToSwimlaneSRNs = series.data\n\n seriesCopy.data = swimlaneTitles.map(swimlaneTitle => {\n const simwlaneSrn = this.props.swimlanes\n .get(swimlaneTitle, Map())\n .get('srn')\n return dataMappedToSwimlaneSRNs[simwlaneSrn] || 0\n })\n\n return seriesCopy\n })\n }\n\n getCategories = data => {\n const dataSetKeys = data\n .map(({ data }) => data)\n .map(obj => Object.keys(obj))\n const swimlaneSRNs = _.chain(dataSetKeys).flatten().uniq().value()\n\n const swimlaneReverseLookupMap = _.keyBy(\n this.props.swimlanes.valueSeq().toJS(),\n 'srn'\n )\n\n return swimlaneSRNs\n .map(srn => {\n const swimlane = swimlaneReverseLookupMap[srn]\n if (!swimlane) {\n console.warn(`found ticket for delted swimlane : ${srn}`) // eslint-disable-line no-console\n }\n return swimlane?.title ?? false // eslint-disable-line no-undef\n })\n .filter(_.identity)\n }\n\n render() {\n if (this.props.loading) {\n return (\n \n \n \n )\n }\n\n const { series } = this.state\n\n if (!series || series.length === 0) {\n return (\n
\n \n
\n )\n }\n\n return (\n \n
\n {this.state.series.map((series, index) => (\n
\n this.onClickLegend(index)}\n style={\n exists(this.state.focusedSeries) &&\n this.state.focusedSeries !== index\n ? this.styles.hiddenLegend\n : this.styles.legend\n }\n >\n \n \n
\n ))}\n
\n \n \n )\n }\n}\n\nStackedBarTimeSeries.defaultProps = {\n height: 350,\n legendPosition: 'right',\n style: {},\n}\n\nStackedBarTimeSeries.propTypes = {\n colors: PropTypes.array,\n data: PropTypes.array,\n height: PropTypes.number,\n loading: PropTypes.bool,\n onClickBar: PropTypes.func,\n legendPosition: PropTypes.string,\n style: PropTypes.object,\n preSelectedSeries: PropTypes.string,\n swimlanes: ImmutablePropTypes.map,\n}\n\nexport default StackedBarTimeSeries\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { XYPlot, XAxis, YAxis, HeatmapSeries, Hint } from 'react-vis'\nimport color from 'color'\nimport { scaleLinear } from 'd3-scale'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Map } from 'immutable'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport ChartTooltip from 'components/ChartTooltip'\n\nexport class HeatMap extends React.Component {\n constructor(props) {\n super(props)\n\n this.emptyColor = color(props.theme.success)\n .desaturate(0.6)\n .lighten(0.9)\n .lighten(0.1)\n .hex()\n }\n\n state = {\n hoveredData: null,\n hoveredSeries: null,\n hoveredCategory: null,\n hoveringHint: false,\n }\n\n onClickCategoryLabel = value => {\n this.props.onClick({\n x: value,\n y: undefined,\n })\n }\n\n onClickSeriesLabel = value => {\n this.props.onClick({\n x: undefined,\n y: value,\n })\n }\n\n formatXTick = value => {\n const name = this.props.categoryNameMap.get(value) || value\n let trimmedValue = name || ''\n if (trimmedValue.length > 13) {\n trimmedValue = trimmedValue.substr(0, 14 - 1) + '…'\n }\n\n return (\n this.onClickCategoryLabel(value)}\n textAnchor=\"middle\"\n transform=\"translate(0, 40) rotate(-45)\"\n onMouseEnter={() => this.setState({ hoveredCategory: value })}\n onMouseLeave={() => this.setState({ hoveredCategory: null })}\n style={{ cursor: 'pointer' }}\n >\n {trimmedValue}\n \n )\n }\n\n formatYTick = value => {\n let trimmedValue = value || ''\n if (trimmedValue.length > 16) {\n trimmedValue = value.substr(0, 15) + '…'\n }\n\n return (\n this.onClickSeriesLabel(value)}\n dy=\"0.32em\"\n textAnchor=\"end\"\n transform=\"translate(-15, 0)\"\n onMouseEnter={() => this.setState({ hoveredSeries: value })}\n onMouseLeave={() => this.setState({ hoveredSeries: null })}\n style={{ cursor: 'pointer' }}\n >\n {trimmedValue}\n \n )\n }\n\n getVerticalBarData = () => {\n let yAxisTotals = []\n\n if (this.props.seriesTotalsOverrides) {\n yAxisTotals = this.props.data.map(series => {\n const total = this.props.seriesTotalsOverrides[series.name]\n return {\n x: total,\n y: series.name,\n color: this.props.theme.secondary,\n }\n })\n } else {\n yAxisTotals = this.props.data.map(series => {\n const total = series.data.reduce((seriesTotal, config) => {\n return (seriesTotal += config.y)\n }, 0)\n return {\n x: total,\n y: series.name,\n color: this.props.theme.secondary,\n }\n })\n }\n\n if (this.props.colorType === 'range') {\n const max = yAxisTotals.reduce(\n (max, val) => Math.max(max, val.x),\n -Infinity\n )\n\n const colorRange = scaleLinear().domain([0, max]).range(this.props.colors)\n\n return yAxisTotals.map(val => {\n val.color =\n val.x === 0\n ? '#fff'\n : color(colorRange(val.x)).alpha(0.5).rgb().string()\n return val\n })\n }\n\n return yAxisTotals\n }\n\n getHorizontalBarData = () => {\n let xAxisTotals = []\n\n if (this.props.categoryTotalsOverrides) {\n xAxisTotals = this.props.xValues.map(val => {\n const total = this.props.categoryTotalsOverrides[val]\n return {\n y: total > 0 ? total : 0,\n x: val,\n color: this.props.theme.secondary,\n displayValue: total,\n }\n })\n } else {\n xAxisTotals = this.props.xValues\n .map((val, index) => {\n const total = this.props.data.reduce((total, series) => {\n return (total += series.data[index].y)\n }, 0)\n\n return total\n })\n .map((total, index) => ({\n y: total,\n x: this.props.xValues[index],\n color: this.props.theme.secondary,\n }))\n }\n\n if (this.props.colorType === 'range') {\n const max = xAxisTotals.reduce(\n (max, val) => Math.max(max, val.y),\n -Infinity\n )\n\n const colorRange = scaleLinear().domain([0, max]).range(this.props.colors)\n\n return xAxisTotals.map(val => {\n val.color =\n val.y === 0\n ? '#fff'\n : color(colorRange(val.y)).alpha(0.5).rgb().string()\n return val\n })\n }\n\n return xAxisTotals\n }\n\n getHeatmapData = () => {\n let vals = []\n\n this.props.data.forEach((series, seriesIndex) => {\n vals = vals.concat(\n series.data.map((conf, index) => ({\n count: conf.y === 0 ? 100 : conf.y, // server side riskScoreNumeric scale is from 1 - 100 so if our count is 0 it means there is no tickets and we can make the risk score 100\n y: series.name,\n x: this.props.xValues[index],\n displayValue: conf.displayValue,\n color:\n this.props.colorType === 'series' && this.props.colors\n ? this.props.colors[seriesIndex]\n : this.props.theme.primary,\n }))\n )\n })\n\n const mainVals = vals.filter(\n square => square.y !== this.props.totalSeriesName\n )\n const max = mainVals.reduce(\n (max, row) => Math.max(max, row.count),\n -Infinity\n )\n\n if (this.props.colorType === 'range') {\n const colorRange = scaleLinear()\n .domain([0, 50, 70, 99, 100])\n .range(['#bc1818', '#bc1818', '#fc7b1e', '#fdd13a', '#81BC88'])\n return vals.map(conf => {\n conf.color = conf.count === 0 ? this.emptyColor : colorRange(conf.count)\n if (\n this.state.hoveredCategory &&\n conf.x !== this.state.hoveredCategory\n ) {\n conf.color = color(conf.color).alpha(0.5).rgb().string()\n }\n if (this.state.hoveredSeries && conf.y !== this.state.hoveredSeries) {\n conf.color = color(conf.color).alpha(0.5).rgb().string()\n }\n if (conf.count === 0) {\n // figuring this one out\n }\n if (conf.count < 0) {\n conf.color = `rgb(225,225,225)`\n }\n return conf\n })\n } else {\n const opacityRange = scaleLinear().domain([0, max]).range([0, 1])\n\n return vals.map(conf => {\n conf.color =\n conf.count === 0\n ? this.emptyColor\n : color(conf.color).alpha(opacityRange(conf.count)).rgb().string()\n\n return conf\n })\n }\n }\n\n onValueMouseOverHeatmap = datapoint => {\n this.setState({\n hoveredData: datapoint,\n })\n }\n\n onValueMouseOutHeatmap = () => {\n if (!this.state.hoveringHint) {\n this.setState({\n hoveredData: null,\n })\n }\n }\n\n onHoverHint = () => {\n this.setState({\n hoveringHint: true,\n })\n }\n\n onLeaveHint = () => {\n this.setState({\n hoveredData: null,\n hoveredSeries: null,\n hoveredCategory: null,\n hoveringHint: false,\n })\n }\n\n onValueClickHeatmap = datapoint => {\n this.props.onClick({\n x: datapoint.x,\n y: datapoint.y,\n })\n }\n\n render() {\n const seriesTotals = this.getVerticalBarData()\n const categoryTotals = this.getHorizontalBarData()\n\n const xAxisHoverValue =\n categoryTotals.find(total => total.x === this.state.hoveredCategory) || {}\n\n const yAxisHoverValue =\n seriesTotals.find(total => total.y === this.state.hoveredSeries) || {}\n\n return (\n
\n series.name)}\n height={this.props.height}\n width={this.props.width}\n margin={{ right: 0, top: 0, left: 170, bottom: 150 }}\n >\n \n \n \n {this.state.hoveredData && (\n \n = 0\n ? this.state.hoveredData.displayValue ||\n this.state.hoveredData.count\n : 'Not Enabled'\n }\n />\n \n )}\n {this.state.hoveredSeries && (\n \n \n \n )}\n {this.state.hoveredCategory && (\n \n \n \n )}\n \n
\n )\n }\n}\n\nHeatMap.defaultProps = {\n height: 350,\n width: 800,\n colorType: 'series',\n categoryNameMap: Map(),\n}\n\nHeatMap.propTypes = {\n colors: PropTypes.array,\n colorType: PropTypes.oneOf(['series', 'range']),\n height: PropTypes.number,\n xValues: PropTypes.array,\n data: PropTypes.array,\n onClick: PropTypes.func,\n theme: themeShape,\n totalSeriesName: PropTypes.string,\n seriesTotalsOverrides: PropTypes.object,\n categoryTotalsOverrides: PropTypes.object,\n width: PropTypes.number,\n categoryNameMap: ImmutablePropTypes.map,\n}\n\nexport default themeable(HeatMap)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { XYPlot, XAxis, YAxis, HeatmapSeries } from 'react-vis'\nimport color from 'color'\nimport { scaleLinear } from 'd3-scale'\n\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\n\nimport HeatMapWithTotals from './HeatMapWithTotals'\nexport class HeatMap extends React.Component {\n formatXTick = value => {\n if (value.length > 13) {\n value = value.substr(0, 14 - 1) + '…'\n }\n\n return value\n }\n\n getHeatmapData = () => {\n let vals = []\n\n this.props.data.forEach((series, seriesIndex) => {\n vals = vals.concat(\n series.data.map((conf, index) => ({\n count: conf.y,\n y: series.name,\n x: this.props.xValues[index],\n color: this.props.colors[seriesIndex],\n }))\n )\n })\n\n const max = vals.reduce((max, row) => Math.max(max, row.count), -Infinity)\n\n const opacityRange = scaleLinear().domain([0, max]).range([0, 1])\n\n vals = vals.map(conf => {\n conf.color =\n conf.count === 0\n ? '#fff'\n : color(conf.color).alpha(opacityRange(conf.count)).rgb().string()\n\n return conf\n })\n\n return vals\n }\n\n render() {\n if (this.props.showTotals) {\n return \n }\n\n return (\n series.name)}\n height={this.props.height}\n width={800}\n margin={{ right: 0, top: 0, left: 150, bottom: 150 }}\n >\n \n \n \n \n )\n }\n}\n\nHeatMap.defaultProps = {\n height: 350,\n showTotals: false,\n}\n\nHeatMap.propTypes = {\n colors: PropTypes.array,\n height: PropTypes.number,\n xValues: PropTypes.array,\n data: PropTypes.array,\n onClick: PropTypes.func,\n showTotals: PropTypes.bool,\n theme: themeShape,\n categoryNameMap: ImmutablePropTypes.map,\n}\n\nexport default themeable(HeatMap)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport _ from 'lodash'\nimport { List, fromJS, Map } from 'immutable'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\n\nimport StackedBarTimeSeries from 'components/StackedBarTimeSeries'\nimport Heatmap from 'components/HeatMap'\nimport { getAlertLevelColorHML } from 'utils/widgetUtils'\nimport { SEVERITY_CATEGORIES } from 'appConstants'\nimport sizeMe from 'components/SizeMe'\nimport { selectControlFrameworksForUser } from 'containers/ControlFrameworkData/selectors'\nimport {\n selectSwimlanes,\n selectSwimlanesBySrn,\n} from 'containers/SonraiData/selectors'\n\nimport {\n selectCategoryRollupData,\n selectTimelineRollupData,\n selectLoadingRollupData,\n selectCategorySeriesTotals,\n} from './selectors'\nimport { BlockShimmer } from 'components/ShimmerLoader'\nimport { GLOBAL_SWIMLANE_NAME } from 'appConstants'\n\nconst SizedHeatMap = sizeMe(Heatmap)\nexport class OverviewVis extends React.Component {\n styles = {\n wrapper: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '2fr 1fr',\n gridTemplateAreas: '\"heatmap\" \"spacer\" \"barchart\"',\n width: '100%',\n padding: '0.5em',\n gridRowGap: '1em',\n overflowX: 'auto',\n },\n wrapperNoGlobal: {\n display: 'grid',\n gridTemplateColumns: '1fr',\n gridTemplateRows: '1fr',\n gridTemplateAreas: '\"heatmap\"',\n width: '100%',\n padding: '0.5em',\n gridRowGap: '1em',\n overflowX: 'auto',\n },\n heatmap: {\n gridArea: 'heatmap',\n },\n barchart: {\n gridArea: 'barchart',\n },\n }\n\n constructor(props) {\n super(props)\n this.state = {\n categoryNameMap: this.getCategoryNameMap(),\n }\n }\n\n onClickTimelineBar = datapoint => {\n const severity = datapoint.series ? datapoint.series.id : null\n this.props.setSeverity(severity)\n }\n\n getCategoryNameMap = () => {\n const cfMap = {}\n this.props.cf.forEach(cf => {\n cfMap[cf.get('srn')] = cf.get('shortDescription') || cf.get('title')\n })\n return fromJS(cfMap)\n }\n\n getCategories = () => {\n let categories = ['Access', 'Activity', 'Property']\n const accessibleSwombos = Object.keys(\n this.props.swimlanesKeyedProperly.toJS()\n )\n\n const cfSrns = this.props.cf\n .toList()\n .filter(cf => {\n if (cf.get('enabled') === true) {\n if (!cf.get('swimlaneSRNs') || cf.get('swimlaneSRNs').size < 1) {\n return true\n } else\n return (\n _.intersection(cf.get('swimlaneSRNs').toJS(), accessibleSwombos)\n .length > 0\n )\n }\n return false\n })\n .map(cf => cf.get('srn'))\n .toJS()\n\n return categories.concat(cfSrns)\n }\n\n getBarDataForSeverity = values => {\n return values\n .reduce((swimlaneCountMap, rollup) => {\n const swimlaneSrn = rollup.get('swimlaneSrns', List()).get(0)\n\n if (swimlaneCountMap.has(swimlaneSrn)) {\n return swimlaneCountMap.update(\n swimlaneSrn,\n total => (total += rollup.get('count'))\n )\n } else {\n return swimlaneCountMap.set(swimlaneSrn, rollup.get('count'))\n }\n }, Map())\n .toJS()\n }\n\n getBarData = () => {\n return [\n {\n name: 'Low Severity',\n id: SEVERITY_CATEGORIES.LOW,\n data: this.getBarDataForSeverity(\n this.props.timelineRollupData.get(SEVERITY_CATEGORIES.LOW, List())\n ),\n },\n {\n name: 'Medium Severity',\n id: SEVERITY_CATEGORIES.MEDIUM,\n data: this.getBarDataForSeverity(\n this.props.timelineRollupData.get(SEVERITY_CATEGORIES.MEDIUM, List())\n ),\n },\n {\n name: 'High Severity',\n id: SEVERITY_CATEGORIES.HIGH,\n data: this.getBarDataForSeverity(\n this.props.timelineRollupData.get(SEVERITY_CATEGORIES.HIGH, List())\n ),\n },\n ]\n }\n\n getSwimlaneHeatmapData = () => {\n if (!this.props.swimlanes) {\n return []\n }\n\n const categories = this.getCategories()\n\n const swimlaneSeries = this.props.swimlanes\n .toList()\n .sortBy(swimlane => (swimlane.get('title') || '').toLowerCase())\n .reverse()\n .toJS()\n .map(swimlane => {\n const dataByCategory = this.props.categoryRollupData.get(\n swimlane.title,\n Map()\n )\n\n const data = categories.map((categoryName, index) => {\n const rollupVal = dataByCategory.get(categoryName)\n\n let yValue = rollupVal\n ? _.round(rollupVal.get('riskScoreNumeric'))\n : 0\n const swimmiesForCF = this.props.cf.getIn(\n [categoryName, 'swimlaneSRNs'],\n List()\n )\n if (\n swimmiesForCF != null &&\n swimmiesForCF.size > 0 &&\n !swimmiesForCF.contains(swimlane.srn)\n ) {\n yValue = -1\n }\n\n const riskGrade = rollupVal ? rollupVal.get('riskScore') : 'A'\n\n return {\n x: `${index}`,\n y: yValue,\n displayValue: riskGrade,\n }\n })\n\n return {\n name: swimlane.title,\n data: data,\n }\n })\n\n return swimlaneSeries.reduce((sorted, series) => {\n if (series.name === GLOBAL_SWIMLANE_NAME) {\n return [series, ...sorted]\n }\n return [...sorted, series]\n }, [])\n }\n\n onClickHeatmap = datapoint => {\n let filters = {}\n if (datapoint.y) {\n filters.swimlane = datapoint.y\n }\n\n if (datapoint.x) {\n switch (datapoint.x) {\n case 'Access':\n filters.ticketType = 'Access'\n break\n case 'Activity':\n filters.ticketType = 'Activity'\n break\n case 'Property':\n filters.ticketType = 'Property'\n break\n default:\n filters.ticketType = 'Framework'\n filters.ticketKey = datapoint.x\n }\n }\n\n this.props.setFilters(filters)\n }\n\n getWrapperStyle = () => {\n const swimlaneCount = this.props.swimlanes.size\n\n const maxRowHeight = 50\n const minRowHeight = 24\n const topBarChartHeight = 85\n const xAxisHeight = 100\n\n const heightForFewSwimlanes =\n xAxisHeight + topBarChartHeight + maxRowHeight * swimlaneCount\n const heightForManySwimlanes =\n xAxisHeight + topBarChartHeight + minRowHeight * swimlaneCount\n\n if (!this.showTimeline()) {\n return {\n ...this.styles.wrapperNoGlobal,\n gridTemplateRows: `${\n swimlaneCount <= 15 ? heightForFewSwimlanes : heightForManySwimlanes\n }px 1fr`,\n }\n }\n\n return {\n ...this.styles.wrapper,\n gridTemplateRows: `${\n swimlaneCount <= 15 ? heightForFewSwimlanes : heightForManySwimlanes\n }px 1fr 250px`,\n overflow: 'auto',\n }\n }\n\n getHeatmapStyle = () => {\n if (this.props.loadingRollupData.get('category')) {\n return this.styles.heatmap\n }\n\n const numCategories = this.getCategories().length\n\n if (numCategories <= 25) {\n return this.styles.heatmap\n }\n\n const columnWidth = 50\n const barChartWidth = 70\n const yAxisWidth = 60\n\n return {\n ...this.styles.heatmap,\n width: `${columnWidth * numCategories + barChartWidth + yAxisWidth}px`,\n }\n }\n\n getGlobalValuesByCategory = (categories, globalTotals) => {\n let categoryTotalMap = {}\n\n categories.forEach((value, index) => {\n categoryTotalMap[value] = _.get(globalTotals, [index, 'displayValue'])\n })\n\n return categoryTotalMap\n }\n\n renderHeatmap = () => {\n if (this.props.loadingRollupData.get('category')) {\n return \n }\n\n const categories = this.getCategories()\n const data = this.getSwimlaneHeatmapData()\n const globalData =\n (data.find(series => series.name === GLOBAL_SWIMLANE_NAME) || {}).data ||\n []\n\n const userHasGlobal = globalData.length > 1\n\n return (\n \n )\n }\n\n renderTimeline = () => {\n if (!this.showTimeline()) {\n return null\n }\n\n if (this.props.loadingRollupData.get('timeline')) {\n return (\n \n
\n
\n \n
\n \n )\n }\n\n const timelineData = this.getBarData()\n const preselectedSeries = timelineData.find(\n series => series.id === this.props.visFilters.get('severityCategory')\n )\n\n return (\n \n
\n Number of Tickets {' '}\n
\n \n
\n )\n }\n\n showTimeline = () => {\n return !!this.props.swimlanes.find(\n swimlane => swimlane.get('title') === GLOBAL_SWIMLANE_NAME\n )\n }\n\n render() {\n const wrapper = this.getWrapperStyle()\n\n return (\n
\n
{this.renderHeatmap()}
\n
\n
{this.renderTimeline()}
\n
\n )\n }\n}\n\nOverviewVis.propTypes = {\n categoryRollupData: ImmutablePropTypes.iterable.isRequired,\n categorySeriesTotals: ImmutablePropTypes.map.isRequired,\n cf: ImmutablePropTypes.map.isRequired,\n loadingRollupData: ImmutablePropTypes.map,\n setFilters: PropTypes.func.isRequired,\n setSeverity: PropTypes.func.isRequired,\n swimlanes: ImmutablePropTypes.map,\n swimlanesKeyedProperly: ImmutablePropTypes.map,\n timelineRollupData: ImmutablePropTypes.iterable.isRequired,\n visFilters: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n cf: selectControlFrameworksForUser,\n swimlanes: selectSwimlanes,\n swimlanesKeyedProperly: selectSwimlanesBySrn,\n categoryRollupData: selectCategoryRollupData,\n loadingRollupData: selectLoadingRollupData,\n timelineRollupData: selectTimelineRollupData,\n categorySeriesTotals: selectCategorySeriesTotals,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nexport default compose(withConnect)(OverviewVis)\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport qs from 'query-string'\nimport { Modal, ModalBody, ModalFooter } from 'reactstrap'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { push } from 'connected-react-router'\nimport DropdownActions, {\n DropdownAnchor,\n DropdownMenu,\n DropdownItem,\n} from 'components/DropdownActions'\nimport Pill from 'components/Badge/Pill'\nimport TextLink from 'components/TextLink'\nimport CenterContent from 'components/CenterContent'\nimport Button from 'components/Button'\nimport SectionHeader from 'components/SectionHeader'\nimport Tooltip from 'components/Tooltip'\nimport BorderlessButton from 'components/BorderlessButton'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { selectSwimlanes } from 'containers/SonraiData/selectors'\nimport { selectUserProfile } from 'containers/UserProfileData/selectors'\nimport { setSecurityCenterWelcomeModal } from 'containers/UserProfileData/actions'\nimport LoadingAnim from 'components/LoadingAnim'\nimport ScWelcomeScreen from 'components/ScWelcomeScreen'\nimport Icon from 'components/Icon'\nimport FilterVis from './FilterVis'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport {\n selectLoadedControlGroups,\n selectLoadedPolicies,\n selectControlGroups,\n} from 'containers/ControlFrameworkData/selectors'\nimport {\n setSelectedResourceId,\n setSelectedSwimlaneName,\n setSelectedCategory,\n fetchRollupData,\n fetchCategoryRollupData,\n setVisFilters,\n clearSelectedResourceId,\n toggleSCInfoModal,\n setSelectedSeverity,\n setStatusFilter,\n} from './actions'\nimport scSaga from './sagas'\nimport {\n selectSelectedResourceId,\n selectView,\n selectSelectedSwimlaneName,\n selectVisFilters,\n selectSelectedCategory,\n selectSCInfoModal,\n selectSelectedSeverity,\n selectSelectedResource,\n selectStatus,\n selectLoadingRollupData,\n} from './selectors'\nimport reducer from './reducer'\nimport { VIEWS } from './constants'\nimport OverviewVis from './OverviewVis'\nimport permissionChecker from 'containers/PermissionChecker'\n\nexport class SecurityCenter extends React.Component {\n constructor(props) {\n super(props)\n this.styles = {\n content: {\n padding: '1em',\n display: 'grid',\n gridTemplateRows: 'auto 1fr',\n gridTemplateAreas: '\"pagetitle\" \"content\"',\n height: '100%',\n },\n dateFilter: {\n gridArea: 'datefilter',\n },\n pageTitle: {\n display: 'grid',\n gridTemplateColumns: '1fr 2fr 1fr',\n gridArea: 'pagetitle',\n gridTemplateAreas: '\"title datefilter action\"',\n },\n actionButtons: {\n textAlign: 'right',\n },\n preFilterPill: {\n fontSize: '1em',\n },\n tooltip: {\n display: 'flex',\n flexDirection: 'column',\n padding: '5px',\n },\n }\n this.hasPermission = props.userHasPermission({\n permissionName: 'view.data',\n })\n\n if (this.hasPermission) {\n this.checkUrl()\n\n if (\n props.loadedControlGroups &&\n props.loadedPolicies &&\n props.swimlanes\n ) {\n props.fetchRollupData({\n status: props.status,\n severityCategory: props.selectedSeverity,\n })\n }\n }\n\n this.state = {\n showWelcome: !window.localStorage.getItem('securitycenterwelcomemodal'),\n resizing: false,\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.updateDimensions)\n if (this.resizeTimer) {\n clearTimeout(this.resizeTimer)\n }\n }\n\n componentDidMount() {\n window.addEventListener('resize', this.updateDimensions)\n }\n\n updateDimensions = () => {\n this.setState({\n resizing: true,\n })\n\n clearTimeout(this.resizeTimer)\n this.resizeTimer = setTimeout(() => {\n this.setState({\n resizing: false,\n })\n }, 500)\n }\n\n componentDidUpdate(oldProps) {\n if (\n ((!oldProps.loadedControlGroups ||\n !oldProps.loadedPolicies ||\n !oldProps.swimlanes) &&\n this.props.loadedControlGroups &&\n this.props.loadedPolicies &&\n this.props.swimlanes) ||\n this.props.status !== oldProps.status\n ) {\n this.props.fetchRollupData({\n status: this.props.status,\n severityCategory: this.props.selectedSeverity,\n })\n }\n }\n\n checkUrl = () => {\n const {\n swimlane,\n resourceId,\n category,\n severityCategory,\n status,\n view, //eslint-disable-line\n selectedResourceId,\n ...rest\n } = qs.parse(this.props.location.search)\n\n if (swimlane) {\n this.props.setSelectedSwimlaneName(swimlane)\n }\n\n if (category) {\n this.props.setSelectedCategory(category)\n }\n\n if (resourceId) {\n this.props.setSelectedResourceId(resourceId)\n }\n\n if (selectedResourceId) {\n this.props.setSelectedResourceId(selectedResourceId)\n }\n\n if (severityCategory) {\n this.props.setSelectedSeverity(severityCategory)\n }\n\n if (status) {\n this.props.setStatusFilter(status)\n }\n\n if (severityCategory) {\n this.props.setVisFilters({ ...rest, severityCategory })\n } else {\n this.props.setVisFilters(rest)\n }\n }\n\n handleWelcomeModal = () => {\n this.props.toggleSCInfoModal()\n this.props.setSecurityCenterWelcomeModal()\n }\n\n toggleSCInfoModal = () => {\n this.props.toggleSCInfoModal()\n }\n\n setSelectedSwimlaneName = name => {\n this.props.setSelectedSwimlaneName(name)\n\n const currentParams = qs.parse(this.props.location.search)\n\n this.props.push({\n search: qs.stringify({\n ...currentParams,\n swimlane: name,\n view: VIEWS.RESOURCES,\n }),\n })\n }\n\n setSeverity = severity => {\n this.props.setSelectedSeverity(severity)\n\n const currentParams = qs.parse(this.props.location.search)\n\n this.props.push({\n search: qs.stringify({\n ...currentParams,\n severityCategory: severity,\n }),\n })\n\n //No reason to refetch the timleine, only want to refetch the heatmap\n this.props.fetchCategoryRollupData({\n severityCategory: severity,\n })\n }\n\n setFilters = ({\n swimlane,\n selectedResourceId,\n ticketType,\n ticketKey,\n severityCategory,\n view, //eslint-disable-line\n ...rest\n }) => {\n if (selectedResourceId) {\n this.props.setSelectedResourceId(selectedResourceId)\n } else {\n this.props.clearSelectedResourceId()\n }\n\n this.props.setSelectedSwimlaneName(swimlane)\n\n let category = ''\n if (ticketType === 'Framework') {\n category = ticketKey\n } else {\n category = ticketType\n }\n\n this.props.setSelectedCategory(category)\n\n this.props.setVisFilters({\n ...rest,\n severityCategory: severityCategory || this.props.selectedSeverity,\n ticketKey,\n ticketType,\n })\n\n this.props.push({\n search: qs.stringify({\n swimlane: swimlane,\n category: category,\n selectedResourceId: selectedResourceId,\n status: this.props.status,\n view: VIEWS.RESOURCES,\n severityCategory: severityCategory || this.props.selectedSeverity,\n ...rest,\n }),\n })\n }\n\n setSelectedResourceId = resourceId => {\n this.props.setSelectedResourceId(resourceId)\n const currentParams = qs.parse(this.props.location.search)\n this.props.push({\n search: qs.stringify({\n ...currentParams,\n selectedResourceId: resourceId,\n }),\n })\n }\n\n setVisFilters = filters => {\n this.props.setVisFilters(filters)\n\n this.props.push({\n search: qs.stringify({\n view: VIEWS.RESOURCES,\n ...filters,\n }),\n })\n }\n\n toggleView = newView => {\n this.props.clearSelectedResourceId()\n this.props.setSelectedSwimlaneName()\n this.props.setSelectedCategory()\n this.props.setSelectedSeverity()\n this.props.setVisFilters({})\n this.props.setStatusFilter('OPEN')\n\n //Dont include the severityCategory because we wiped it above\n this.props.fetchRollupData()\n\n this.props.push({\n search: qs.stringify({\n view: newView,\n }),\n })\n }\n\n getFilters = () => {\n const baseFilters = this.props.visFilters\n .set('severityCategory', this.props.selectedSeverity)\n .set('status', this.props.status)\n\n return baseFilters\n }\n\n renderVisFilters = () => {\n const titleParts = []\n\n if (this.props.selectedSwimlaneName) {\n titleParts.push(\n \n Swimlane: {this.props.selectedSwimlaneName}{' '}\n \n )\n }\n\n if (this.props.selectedCategory) {\n if (this.props.selectedCategory.includes('srn')) {\n const srn = this.props.selectedCategory\n const name = this.props.controlGroups.getIn([srn, 'title'])\n titleParts.push(\n \n Control Framework: {name}{' '}\n \n )\n } else {\n titleParts.push(\n \n CRM Category : {this.props.selectedCategory}{' '}\n \n )\n }\n }\n\n if (titleParts.length === 0) {\n return null\n }\n\n return (\n \n
{titleParts}
\n
\n )\n }\n\n getHelpIcon = () => (\n
\n \n \n \n }\n tooltipContent={\n
\n \n The Security Center allows users to organize and group cloud\n assets and resources by account, tags and resource names, across\n multiple cloud accounts and cloud platforms. Select “Manage\n Swimlanes” from the user menu on the right to configure Swimlanes.\n \n \n Read More\n \n
\n }\n position=\"right\"\n />\n
\n )\n\n handleFilterStatus = status => {\n this.setState({\n dropdown: false,\n })\n this.props.setStatusFilter(status)\n }\n\n getDropDownItems = () => {\n const STATUS = ['OPEN', 'NEW', 'ALL', 'CLOSED']\n return STATUS.map((item, index) => (\n this.handleFilterStatus(item)}\n disabled={this.props.status === item}\n >\n {' '}\n {item}{' '}\n \n ))\n }\n\n getStatusFilter = () => {\n return (\n \n \n {' '}\n Filter by Status:\n
\n \n this.setState(oldState => ({\n dropdown: !oldState.dropdown,\n }))\n }\n >\n \n
\n {this.props.status}\n
\n \n \n {this.getDropDownItems()}\n \n \n )\n }\n\n renderVis = () => {\n return (\n
\n
\n
\n Tickets Overview\n {this.getHelpIcon()}\n
\n
\n {this.getStatusFilter()}\n \n
\n )\n }\n\n renderBoard = () => {\n return (\n
\n
\n
\n Ticket Resources\n {this.getHelpIcon()}\n
\n\n
{this.renderVisFilters()}
\n\n
\n this.toggleView(VIEWS.VIS)}\n >\n Back to Heatmap Summary\n \n
\n
\n
\n\n \n
\n )\n }\n\n renderView = () => {\n if (this.props.view === VIEWS.VIS) {\n return this.renderVis()\n } else {\n return this.renderBoard()\n }\n }\n\n render() {\n if (!this.hasPermission) {\n return (\n \n {' '}\n Insufficent Permissions to view data in the Security Center{' '}\n \n )\n }\n\n if (\n !this.props.swimlanes ||\n !this.props.loadedControlGroups ||\n !this.props.loadedPolicies\n ) {\n return \n }\n\n const isOpen =\n !this.props.userProfile.get('hasSeenSecurityCenterWelcomeModal') ||\n this.props.scInfoModal\n\n return (\n \n {this.renderView()}\n\n \n \n \n \n \n \n \n \n \n )\n }\n}\n\nSecurityCenter.propTypes = {\n clearSelectedResourceId: PropTypes.func.isRequired,\n controlGroups: ImmutablePropTypes.iterable.isRequired,\n fetchCategoryRollupData: PropTypes.func.isRequired,\n fetchRollupData: PropTypes.func,\n loadedControlGroups: PropTypes.bool,\n loadedPolicies: PropTypes.bool,\n location: PropTypes.object,\n userProfile: ImmutablePropTypes.iterable,\n push: PropTypes.func,\n setSecurityCenterWelcomeModal: PropTypes.func,\n setSelectedCategory: PropTypes.func.isRequired,\n setSelectedResourceId: PropTypes.func.isRequired,\n setSelectedSeverity: PropTypes.func.isRequired,\n setSelectedSwimlaneName: PropTypes.func.isRequired,\n setVisFilters: PropTypes.func.isRequired,\n selectedCategory: PropTypes.string,\n selectedSwimlaneName: PropTypes.string,\n selectedSeverity: PropTypes.string,\n swimlanes: ImmutablePropTypes.map,\n view: PropTypes.string,\n visFilters: ImmutablePropTypes.map.isRequired,\n theme: themeShape,\n toggleSCInfoModal: PropTypes.func,\n scInfoModal: PropTypes.bool,\n selectedResource: ImmutablePropTypes.iterable,\n userHasPermission: PropTypes.func.isRequired,\n status: PropTypes.string.isRequired,\n setStatusFilter: PropTypes.func.isRequired,\n loadingRollupData: ImmutablePropTypes.map,\n}\n\nconst mapStateToProps = createStructuredSelector({\n controlGroups: selectControlGroups,\n loadedControlGroups: selectLoadedControlGroups,\n loadedPolicies: selectLoadedPolicies,\n selectedResourceId: selectSelectedResourceId,\n selectedSwimlaneName: selectSelectedSwimlaneName,\n selectedCategory: selectSelectedCategory,\n selectedSeverity: selectSelectedSeverity,\n swimlanes: selectSwimlanes,\n userProfile: selectUserProfile,\n view: selectView,\n visFilters: selectVisFilters,\n scInfoModal: selectSCInfoModal,\n selectedResource: selectSelectedResource,\n status: selectStatus,\n loadingRollupData: selectLoadingRollupData,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n clearSelectedResourceId,\n fetchRollupData,\n fetchCategoryRollupData,\n setSecurityCenterWelcomeModal,\n setSelectedResourceId,\n setSelectedSwimlaneName,\n setSelectedCategory,\n setVisFilters,\n push,\n toggleSCInfoModal,\n setSelectedSeverity,\n setStatusFilter,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\nconst withReducer = injectReducer({ key: 'securityCenter', reducer })\nconst withSaga = injectSaga({ key: 'sc', saga: scSaga })\n\nexport default compose(\n withReducer,\n withSaga,\n withConnect,\n permissionChecker\n)(themeable(SecurityCenter))\n"],"sourceRoot":""}