{"version":3,"sources":["webpack:///./app/components/YamlView/index.js","webpack:///./app/components/YamlView/yammyModule.js","webpack:///./node_modules/wordwrap/index.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/styles.css?6bdc","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/styles.css","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/constants.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/reducers.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/actions.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/queries.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/sagas.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/messages.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sNodePolicyDetails.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/utils.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sPVDetails.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sServiceDetails.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sWorkloadAffinity.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sWorkloadContainers.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sWorkloadSpec.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sWorkloadTemplateSpec.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/selectors.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/K8sWorkloadInfrastructureTab.js","webpack:///./app/containers/NodeViewLayouts/K8sWorkloadNodeViewCardLayout/index.js"],"names":["styles","displayStyles","filterMatch","fontWeight","backgroundColor","comment","color","property","string","YamlView","props","ymlText","useState","stringifiedText","setStringifiedText","useEffect","onStringify","skipParsing","value","obj","_","isObject","JSON","parse","e","console","error","yammyBoi","stringify","tokens","CodeMirror","runMode","name","token","style","tokenStyles","split","map","className","trim","filter","reduce","allStyles","highlightText","toLowerCase","includes","Object","assign","push","length","defaultProps","maxText","wrap","require","module","exports","data","handlers","indentLevel","undefined","null","number","x","boolean","output","indexOf","text","replace","forEach","y","date","toJSON","array","handler","Error","object","keys","k","val","function","wordwrap","start","stop","params","mode","re","toString","acc","i","slice","lines","rawChunk","chunk","c","Array","join","match","xs","shift","soft","hard","content","options","transform","locals","GET_POD_TEMPLATE_DATA","GET_CLUSTER_INFRASTRUCTURE","initialState","fromJS","clusterInfrastructure","loading","podTemplate","k8sWorkloadNodeViewReducer","handleActions","state","setIn","payload","getPodTemplateData","createAction","getPodTemplateDataError","getPodTemplateDataSuccess","getClusterInfrastructure","getClusterInfrastructureSucces","getClusterInfrastructureError","GET_CLUSTER_INFRA","gql","GET_POD_TEMPLATE_DATA_QUERY","k8sWorkloadNodeViewSaga","action","getClient","client","srn","query","variables","result","path","contents","get","put","all","takeLatest","defineMessages","affinitySectionHeader","id","defaultMessage","containersSectionHeader","errrorLoadingData","errorPodTemplateData","networkPolicies","persistentVolumes","selectedByServices","specSectionHeader","templateSpecSectionHeader","viewControlHuman","viewControlJSON","viewControlYAML","CLASSIFICATION","K8sNetworkPolicy","policy","onPolicySelected","metadataRaw","metadata","details","metdataNestedObject","policyTypes","labels","values","TextLink","onClick","K8sNetworkPoliciesBody","warn","messages","policies","getIn","toJS","K8sNodePolicyDetails","modalOpen","setModalOpen","paths","setPaths","selectedPolicy","setSelectedPolicy","nodeData","ShowPathModal","resourceId","pathEndItem","classification","isOpen","toggle","getNiceLabel","camel","snakeCase","capitalize","denominations","convertResourceAmountToNiceDisplay","format","denomIndex","Math","floor","convertToNiceBytes","K8sPVDetail","pvc","onSelectedPVC","storage","volumeMode","detailsPart","K8sPVDetailsBody","DynamicFormattedMessage","pvcs","K8sPVDetails","selectedPVC","setSelectedPVC","K8sServiceDetail","service","onServiceSelect","ports","port","protocol","targetPort","K8SServiceDetailsBody","services","K8sServiceDetails","selectedService","setSelectedService","K8sWorkloadAffinity","affinityConfig","affinities","nodeAffinity","type","podAffinity","nodeAntiAffinity","podAntiAffinity","dataSections","topologyKey","matchLabels","matchLabelsText","key","anti","podAffinityTerm","getOtherData","d","title","description","gridColumn","marginBottom","this","getAffinityConfig","getAffinities","antiAffinities","getAntiAffinities","affinityComponents","flatMap","affinity","omit","renderAffinityInfo","antiAffinityComponents","BorderedCard","height","overflowY","SectionHeader","display","gridTemplateColumns","Component","probeDisplay","httpGet","endpoint","scheme","marginTop","failureThreshold","successThreshold","initialDelaySeconds","periodSeconds","timeoutSeconds","sectionsOfResourceLimits","limits","sections","cpu","memory","keyValuesDetailsOmit","specialValueRenderers","args","command","livenessProbe","readinessProbe","innerSections","labelClass","section","resources","requests","volumeMounts","K8sWorkloadContainers","containers","setState","invalidMetadata","initContainers","initContainer","onChange","cont","find","selectedContainer","label","valueToRender","pick","env","getContainers","renderContainerSelect","paddingTop","width","float","paddingRight","renderContainerData","renderContainerOtherData","borderLeft","paddingLeft","position","left","fontSize","renderContainerEnvironment","React","selector","strategy","strat","updateStrategy","K8sWorkloadSpec","spec","specData","getSpecData","sort","renderSpecDataSections","securityContext","textBits","volumes","lis","volume","configMap","configMapData","listStyleType","K8sWorkloadTemplateSpec","getData","renderDataSections","selectK8sWorkloadNodeview","Map","selectPodTemplate","createSelector","selectClusterInfrastructure","card","gridContainer","SquareLoadingAnimation","K8sPodTemplateTab","row","DataTable","getTableData","renderBody","DISP_HUMAN","DISP_YAML","DISP_JSON","Icon","fa","K8sWorkloadNodeViewCardLayout","event","searchText","target","currentSeachMatch","searchMatches","handled","keyCode","shiftKey","scrollToPrevMatch","scrollToNextMatch","preventDefault","displayMode","gridContent","hasAffinity","textCopyButtonContainer","CopyToClipboard","ref","textCardRef","JsonView","controlHeight","layouts","controls","lg","w","h","yaml","templateSpec","K8sWorkloadInfrastructureTab","textAlign","SearchInput","setSearchText","onKeyDown","handleSearchKeyDown","marginLeft","cursor","userSelect","place","effect","data-tip","data-for","setViewHuman","setViewYAML","setViewJson","createRef","top","right","zIndex","nodeId","prevProps","prevState","textDiv","current","matches","getElementsByClassName","firstMatch","scrollTop","offsetTop","offsetHeight","choseNewMatch","switchedTextView","scrollTo","NodeViewHeader","onNodeView","horizontal","NodeView","additionalHeaderDetails","getHeaderContent","renderDetailsTab","getLayouts","cols","getCols","renderViewControl","getGridContent","tabs","getTabs","mapStateToProps","createStructuredSelector","withConnect","connect","dispatch","bindActionCreators","withReducer","injectReducer","reducer","withSaga","injectSaga","saga","sagas","DAEMON","compose"],"mappings":"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","file":"26.4217619152c19b6bc9b6.chunk.js","sourcesContent":["import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport yammyBoi from './yammyModule.js'\nimport _ from 'lodash'\n\nimport CodeMirror from 'codemirror'\nimport 'codemirror/addon/runmode/runmode'\nimport 'codemirror/mode/yaml/yaml'\n\nconst styles = {\n displayStyles: {\n filterMatch: {\n fontWeight: 'bold',\n backgroundColor: '#ffc1075e',\n },\n comment: {\n color: 'green',\n },\n property: {\n color: 'black',\n },\n string: {\n color: '#007ad9',\n },\n },\n}\n\nexport const YamlView = props => {\n const [stringifiedText, setStringifiedText] = useState('')\n\n useEffect(() => {\n if (stringifiedText) {\n props.onStringify(stringifiedText)\n }\n }, [stringifiedText])\n\n let ymlText\n if (props.skipParsing) {\n ymlText = props.value\n } else {\n let obj\n if (_.isObject(props.value)) {\n obj = props.value\n } else {\n try {\n obj = JSON.parse(props.value)\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('could not parse props.value as JSON: ' + props.value, e)\n }\n }\n\n ymlText = yammyBoi.stringify(obj)\n }\n if (stringifiedText != ymlText) {\n setStringifiedText(ymlText)\n }\n\n const tokens = []\n CodeMirror.runMode(\n ymlText,\n {\n name: 'text/yaml',\n },\n (token, style) => {\n const tokenStyles = (style || '')\n .split(' ')\n .map(className => {\n return styles.displayStyles[className.trim()]\n })\n .filter(style => style)\n .reduce((allStyles, style) => {\n return {\n ...allStyles,\n ...style,\n }\n }, {})\n\n // if the text matches the search text, add an additional class\n if (props.highlightText) {\n let highlightText = props.highlightText.toLowerCase()\n if (\n token &&\n highlightText !== '' &&\n token.toLowerCase().includes(highlightText)\n ) {\n style += ' filter-match'\n Object.assign(tokenStyles, styles.displayStyles.filterMatch)\n }\n }\n tokens.push(\n \n {token}\n \n )\n }\n )\n\n return (\n
\n
{tokens}
\n
\n )\n}\n\nYamlView.defaultProps = {\n skipParsing: false,\n onStringify: () => {},\n}\n\nYamlView.propTypes = {\n highlightText: PropTypes.string,\n skipParsing: PropTypes.bool,\n onStringify: PropTypes.func,\n value: PropTypes.oneOfType(PropTypes.string, PropTypes.object).isRequired,\n}\n\nexport default YamlView\n",";(function() {\n 'use strict'\n\n var maxText = 60,\n wrap = require('wordwrap')(maxText)\n\n function stringify(data) {\n var handlers,\n indentLevel = ''\n\n handlers = {\n undefined: function() {\n // objects will not have `undefined` converted to `null`\n // as this may have unintended consequences\n // For arrays, however, this behavior seems appropriate\n return 'null'\n },\n null: function() {\n return 'null'\n },\n number: function(x) {\n return x\n },\n boolean: function(x) {\n return x ? 'true' : 'false'\n },\n string: function(x) {\n var output = '|'\n if (x.length <= maxText && x.indexOf('\\n') === -1) {\n return JSON.stringify(x)\n }\n var text = wrap(x).split(/\\\\n|\\n/)\n indentLevel = indentLevel.replace(/$/, ' ')\n text.forEach(function(y) {\n output += '\\n' + indentLevel + y\n })\n indentLevel = indentLevel.replace(/ {2}/, '')\n\n return output\n },\n date: function(x) {\n return x.toJSON()\n },\n array: function(x) {\n var output = ''\n\n if (0 === x.length) {\n output += '[]'\n return output\n }\n\n indentLevel = indentLevel.replace(/$/, ' ')\n x.forEach(function(y) {\n // TODO how should `undefined` be handled?\n var handler = handlers[typeof y]\n\n if (!handler) {\n throw new Error('what the crap: ' + typeof y)\n }\n\n output += '\\n' + indentLevel + '- ' + handler(y)\n })\n indentLevel = indentLevel.replace(/ {2}/, '')\n\n return output\n },\n object: function(x) {\n var output = ''\n\n if (0 === Object.keys(x).length) {\n output += '{}'\n return output\n }\n\n indentLevel = indentLevel.replace(/$/, ' ')\n Object.keys(x).forEach(function(k) {\n var val = x[k],\n handler = handlers[typeof val]\n\n if ('undefined' === typeof val) {\n // the user should do\n // delete obj.key\n // and not\n // obj.key = undefined\n // but we'll error on the side of caution\n return\n }\n\n if (!handler) {\n throw new Error('Yaml Module Error: ' + typeof val)\n }\n\n output += '\\n' + indentLevel + k + ': ' + handler(val)\n })\n indentLevel = indentLevel.replace(/ {2}/, '')\n\n return output\n },\n function: function() {\n // TODO this should throw or otherwise be ignored\n return '[object Function]'\n },\n }\n\n return '---' + handlers[typeof data](data) + '\\n'\n }\n\n module.exports.stringify = stringify\n})()\n","var wordwrap = module.exports = function (start, stop, params) {\n if (typeof start === 'object') {\n params = start;\n start = params.start;\n stop = params.stop;\n }\n \n if (typeof stop === 'object') {\n params = stop;\n start = start || params.start;\n stop = undefined;\n }\n \n if (!stop) {\n stop = start;\n start = 0;\n }\n \n if (!params) params = {};\n var mode = params.mode || 'soft';\n var re = mode === 'hard' ? /\\b/ : /(\\S+\\s+)/;\n \n return function (text) {\n var chunks = text.toString()\n .split(re)\n .reduce(function (acc, x) {\n if (mode === 'hard') {\n for (var i = 0; i < x.length; i += stop - start) {\n acc.push(x.slice(i, i + stop - start));\n }\n }\n else acc.push(x)\n return acc;\n }, [])\n ;\n \n return chunks.reduce(function (lines, rawChunk) {\n if (rawChunk === '') return lines;\n \n var chunk = rawChunk.replace(/\\t/g, ' ');\n \n var i = lines.length - 1;\n if (lines[i].length + chunk.length > stop) {\n lines[i] = lines[i].replace(/\\s+$/, '');\n \n chunk.split(/\\n/).forEach(function (c) {\n lines.push(\n new Array(start + 1).join(' ')\n + c.replace(/^\\s+/, '')\n );\n });\n }\n else if (chunk.match(/\\n/)) {\n var xs = chunk.split(/\\n/);\n lines[i] += xs.shift();\n xs.forEach(function (c) {\n lines.push(\n new Array(start + 1).join(' ')\n + c.replace(/^\\s+/, '')\n );\n });\n }\n else {\n lines[i] += chunk;\n }\n \n return lines;\n }, [ new Array(start + 1).join(' ') ]).join('\\n');\n };\n};\n\nwordwrap.soft = wordwrap;\n\nwordwrap.hard = function (start, stop) {\n return wordwrap(start, stop, { mode : 'hard' });\n};\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!./styles.css\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!./styles.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".k8s-workload-nodeviewcardlayout .k8s-spec-section-label {\\n padding-right: 12px;\\n font-weight: 400;\\n margin-bottom: 8px;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .probe-section-label {\\n margin-bottom: 6px;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .probe-section-label:before {\\n content: \\\" - \\\"; /* hopefully this takes up ~ 8px ... */\\n}\\n\\n.k8s-workload-nodeviewcardlayout .probe-section-label-nodash {\\n position: relative;\\n left: 8px; /* ... otherwise this won't line up */\\n margin-bottom: 6px;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .k8s-env-section > div:nth-child(4n+1),\\n.k8s-workload-nodeviewcardlayout .k8s-env-section > div:nth-child(4n+2)\\n{\\n background-color: #f0f0f0;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .k8s-env-section > div {\\n padding: 2px 4px;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .k8s-env-section > div > span {\\n position: relative;\\n top: 1px;\\n word-break: break-all;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .k8s-env-section-label {\\n font-weight: 400;\\n}\\n\\n.k8s-workload-nodeviewcardlayout .k8s-env-section-value {\\n font-family: monospace;\\n font-size: 13px;\\n}\\n\\n\\n\\n\", \"\"]);\n","export const GET_POD_TEMPLATE_DATA = `app/NodeViewLayouts/K8sWorkload/GET_POD_TEMPLATE_DATA`\nexport const GET_POD_TEMPLATE_DATA_SUCCESS = `app/NodeViewLayouts/K8sWorkload/GET_POD_TEMPLATE_DATA_SUCCESS`\nexport const GET_POD_TEMPLATE_DATA_ERROR = `app/NodeViewLayouts/K8sWorkload/GET_POD_TEMPLATE_DATA_ERROR`\n\nexport const GET_CLUSTER_INFRASTRUCTURE = `app/NodeViewLayouts/K8sWorkload/GET_CLUSTER_INFRASTRUCTURE`\nexport const GET_CLUSTER_INFRASTRUCTURE_SUCCESS = `app/NodeViewLayouts/K8sWorkload/GET_CLUSTER_INFRASTRUCTURE_SUCCESS`\nexport const GET_CLUSTER_INFRASTRUCTURE_ERROR = `app/NodeViewLayouts/K8sWorkload/GET_CLUSTER_INFRASTRUCTURE_ERROR`\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\n\nimport {\n GET_POD_TEMPLATE_DATA,\n GET_POD_TEMPLATE_DATA_ERROR,\n GET_POD_TEMPLATE_DATA_SUCCESS,\n GET_CLUSTER_INFRASTRUCTURE,\n GET_CLUSTER_INFRASTRUCTURE_ERROR,\n GET_CLUSTER_INFRASTRUCTURE_SUCCESS,\n} from './constants'\n\nexport const initialState = fromJS({\n clusterInfrastructure: {\n loading: false,\n error: false,\n data: null,\n },\n podTemplate: {\n loading: false,\n error: false,\n data: null,\n },\n})\n\nconst k8sWorkloadNodeViewReducer = handleActions(\n {\n [GET_CLUSTER_INFRASTRUCTURE]: state =>\n state\n .setIn(['clusterInfrastructure', 'loading'], true)\n .setIn(['clusterInfrastructure', 'error'], false),\n [GET_CLUSTER_INFRASTRUCTURE_ERROR]: state =>\n state\n .setIn(['clusterInfrastructure', 'loading'], false)\n .setIn(['clusterInfrastructure', 'error'], true),\n [GET_CLUSTER_INFRASTRUCTURE_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['clusterInfrastructure', 'loading'], false)\n .setIn(['clusterInfrastructure', 'error'], false)\n .setIn(['clusterInfrastructure', 'data'], fromJS(payload.data)),\n [GET_POD_TEMPLATE_DATA]: state =>\n state\n .setIn(['podTemplate', 'loading'], true)\n .setIn(['podTemplate', 'error'], false),\n\n [GET_POD_TEMPLATE_DATA_ERROR]: state =>\n state\n .setIn(['podTemplate', 'loading'], false)\n .setIn(['podTemplate', 'error'], true),\n\n [GET_POD_TEMPLATE_DATA_SUCCESS]: (state, { payload }) =>\n state\n .setIn(['podTemplate', 'loading'], false)\n .setIn(['podTemplate', 'error'], false)\n .setIn(['podTemplate', 'data'], fromJS(payload.data)),\n },\n initialState\n)\n\nexport default k8sWorkloadNodeViewReducer\n","import { createAction } from 'redux-actions'\nimport {\n GET_POD_TEMPLATE_DATA,\n GET_POD_TEMPLATE_DATA_ERROR,\n GET_POD_TEMPLATE_DATA_SUCCESS,\n GET_CLUSTER_INFRASTRUCTURE,\n GET_CLUSTER_INFRASTRUCTURE_ERROR,\n GET_CLUSTER_INFRASTRUCTURE_SUCCESS,\n} from './constants'\n\nexport const getPodTemplateData = createAction(GET_POD_TEMPLATE_DATA)\nexport const getPodTemplateDataError = createAction(GET_POD_TEMPLATE_DATA_ERROR)\nexport const getPodTemplateDataSuccess = createAction(\n GET_POD_TEMPLATE_DATA_SUCCESS\n)\n\nexport const getClusterInfrastructure = createAction(GET_CLUSTER_INFRASTRUCTURE)\nexport const getClusterInfrastructureSucces = createAction(\n GET_CLUSTER_INFRASTRUCTURE_SUCCESS\n)\nexport const getClusterInfrastructureError = createAction(\n GET_CLUSTER_INFRASTRUCTURE_ERROR\n)\n","import gql from 'graphql-tag'\n\nexport const GET_CLUSTER_INFRA = gql`\n query getClusterInfra_part1($srn: String) {\n Workloads(where: { srn: { value: $srn } }) {\n items {\n isIn(\n where: {\n label: { value: \"ResourceGroup\" }\n on__Resourcegroup: { type: { value: K8SNamespace } }\n }\n ) {\n items {\n srn\n isIn(\n where: {\n label: { value: \"Account\" }\n on__Account: { type: { value: K8SCluster } }\n }\n ) {\n items {\n srn\n name\n isIn(\n where: {\n label: { value: \"Compute\" }\n on__Compute: { type: { value: AzureKubernetesCluster } }\n }\n ) {\n items {\n name\n contains {\n items {\n srn\n label\n active\n createdDate\n ... on Resource {\n name\n }\n ... on Network {\n type\n }\n ... on Networksubnet {\n type\n }\n ... on Networkpolicy {\n type\n }\n ... on Networkcomponent {\n type\n }\n ... on Blockstorage {\n type\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`\n\nexport const GET_POD_TEMPLATE_DATA_QUERY = gql`\n query getPodTemplateData($srn: String) {\n Workloads(where: { srn: { value: $srn } }) {\n items {\n srn\n runsOn {\n items {\n srn\n name\n label\n type\n metadata\n isSelectedByNetworkPolicy {\n items {\n srn\n label\n name\n type\n metadata\n protectsIngress {\n items {\n srn\n label\n type\n metadata\n }\n }\n protectsEgress {\n items {\n srn\n label\n type\n metadata\n }\n }\n }\n }\n isSelectedByNetworkGroup {\n items {\n label\n type\n auditEnabled\n dnsName\n type\n active\n account\n availabilityZone\n createdDate\n lastAlertDate\n content\n cloudType\n country\n createdBy\n importance\n friendlyName\n highestAlertSeverity\n resourceId\n sid\n name\n modifiedDate\n observedDate\n region\n serviceType\n loadId\n label\n srn\n tagCount\n timestamp\n metadata\n isRegisteredWith {\n items {\n srn\n label\n isIn {\n items {\n active\n account\n availabilityZone\n createdDate\n auditEnabled\n lastAlertDate\n content\n cloudType\n country\n createdBy\n importance\n friendlyName\n highestAlertSeverity\n resourceId\n sid\n name\n modifiedDate\n observedDate\n region\n serviceType\n loadId\n label\n srn\n tagCount\n timestamp\n }\n }\n }\n }\n }\n }\n hasAttachedStorage {\n items {\n srn\n name\n label\n metadata\n createdBy\n ... on Datacontainer {\n type\n }\n ... on Entity {\n relations(\n where: {\n relation: { name: { value: \"contains\" } }\n item: { type: { value: \"K8SPersistentVolume\" } }\n }\n ) {\n relation {\n name\n direction\n }\n item {\n srn\n label\n ... on Datacontainer {\n type\n metadata\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n`\n","import { all, put, takeLatest } from 'redux-saga/effects'\nimport _ from 'lodash'\nimport { getClient } from 'apolloClient'\nimport {\n getClusterInfrastructureError,\n getClusterInfrastructureSucces,\n getPodTemplateDataError,\n getPodTemplateDataSuccess,\n} from './actions'\nimport { GET_CLUSTER_INFRASTRUCTURE, GET_POD_TEMPLATE_DATA } from './constants'\nimport { GET_CLUSTER_INFRA, GET_POD_TEMPLATE_DATA_QUERY } from './queries'\n\nfunction* getClusterInfrastructure(action) {\n try {\n const client = yield getClient()\n const { srn } = action.payload\n const result = yield client.query({\n query: GET_CLUSTER_INFRA,\n variables: { srn },\n })\n\n const path = [\n 'data',\n 'Workloads',\n 'items',\n 0,\n 'isIn',\n 'items',\n 0,\n 'isIn',\n 'items',\n 0,\n 'isIn',\n 'items',\n 0,\n 'contains',\n 'items',\n ]\n\n const contents = _.get(result, path, null)\n if (null == contents) {\n throw new Error('Could not get cluster contents: ' + path.join('/'))\n }\n\n yield put(getClusterInfrastructureSucces({ data: contents }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching cluster infrastructure', e)\n yield put(getClusterInfrastructureError())\n }\n}\n\nfunction* getPodTemplateData(action) {\n try {\n const client = yield getClient()\n const { srn } = action.payload\n const result = yield client.query({\n query: GET_POD_TEMPLATE_DATA_QUERY,\n variables: { srn },\n })\n\n const path = ['data', 'Workloads', 'items', 0, 'runsOn', 'items', 0]\n const podTemplate = _.get(result, path, null)\n if (podTemplate === null) {\n throw new Error('The response did not return data at: ' + path.join('/'))\n }\n\n yield put(getPodTemplateDataSuccess({ data: podTemplate }))\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('An error happened fetching the pod template data: ', e)\n yield put(getPodTemplateDataError())\n }\n}\n\nfunction* k8sWorkloadNodeViewSaga() {\n yield all([\n takeLatest(GET_CLUSTER_INFRASTRUCTURE, getClusterInfrastructure),\n takeLatest(GET_POD_TEMPLATE_DATA, getPodTemplateData),\n ])\n}\n\nexport default k8sWorkloadNodeViewSaga\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n affinitySectionHeader: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.affinitySectionHeader',\n defaultMessage: 'Affinity',\n },\n containersSectionHeader: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.containersSectionHeader',\n defaultMessage: 'Containers',\n },\n errrorLoadingData: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.errrorLoadingData',\n defaultMessage: 'There was an error loading data.',\n },\n errorPodTemplateData: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.errorPodTemplateData',\n defaultMessage: 'There was an error loading the pod template data.',\n },\n networkPolicies: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.networkPolicies',\n defaultMessage: 'Network Policies',\n },\n persistentVolumes: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.persistentVolumes',\n defaultMessage: 'Persistent Volumes',\n },\n selectedByServices: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.selectedByServices',\n defaultMessage: 'Selected By Services',\n },\n specSectionHeader: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.specSectionHeader',\n defaultMessage: 'Spec Details',\n },\n templateSpecSectionHeader: {\n id:\n 'app.containers.K8sWorkloadNodeViewCardLayout.templateSpecSectionHeader',\n defaultMessage: 'Template Details',\n },\n viewControlHuman: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.viewControlHuman',\n defaultMessage: 'View as data layout',\n },\n viewControlJSON: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.viewControlJSON',\n defaultMessage: 'View as JSON',\n },\n viewControlYAML: {\n id: 'app.containers.K8sWorkloadNodeViewCardLayout.viewControlYAML',\n defaultMessage: 'View as YAML',\n },\n})\n","import React, { Fragment, useState } from 'react'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { fromJS } from 'immutable'\n\nimport ShowPathModal from 'containers/AccessActivity/ShowPathModal'\n\nimport DyanmicFormattedMessage from 'components/DynamicFormattedMessage'\nimport { NodeViewDetailLabel } from 'components/NodeView'\nimport { TextLineShimmer } from 'components/ShimmerLoader'\nimport TextLink from 'components/TextLink'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport messages from './messages'\n\nconst CLASSIFICATION = 'Selected By Network Policy'\n\nfunction K8sNetworkPolicy({ policy, onPolicySelected = () => {} }) {\n const { name, metadata: metadataRaw } = policy\n\n let details = ''\n if (metadataRaw) {\n const metadata = metdataNestedObject(metadataRaw)\n const policyTypes = _.get(metadata, ['policy', 'spec', 'policyTypes'], [])\n const labels = Object.values(\n _.get(metadata, ['policy', 'spec', 'podSelector', 'matchLabels'], {})\n )\n details = ` (${policyTypes.join('/')}: ${labels.join(',')})`\n }\n return (\n
\n onPolicySelected(policy)}>\n {name}\n \n {details}\n
\n )\n}\n\nK8sNetworkPolicy.propTypes = {\n policy: PropTypes.map,\n onPolicySelected: PropTypes.function,\n}\n\nfunction K8sNetworkPoliciesBody(props) {\n // cannot render anything w/ invalid props\n if (!props.podTemplate) {\n // eslint-disable-next-line no-console\n console.warn('K8sServiceDetails: expected to receive prop podTemplate')\n return null\n }\n\n // render loading state\n if (props.podTemplate.get('loading')) {\n return \n }\n\n // render error loading state\n if (props.podTemplate.get('error')) {\n return \n }\n\n const path = ['data', 'isSelectedByNetworkPolicy', 'items']\n const policies = props.podTemplate.getIn(path, null)\n\n if (policies === null) {\n // eslint-disable-next-line no-console\n console.warn(\n 'K8sNodePolicyDetails: podTemplate no data @ ' + path.join('/')\n )\n return null\n }\n return policies.map((policy, i) => (\n \n ))\n}\n\nexport default function K8sNodePolicyDetails(props) {\n const [modalOpen, setModalOpen] = useState(false)\n const [paths, setPaths] = useState([])\n const [selectedPolicy, setSelectedPolicy] = useState({})\n const onPolicySelected = policy => {\n setSelectedPolicy(policy)\n setModalOpen(true)\n setPaths(fromJS([[props.nodeData.srn]]))\n }\n return (\n \n
\n \n \n \n \n setModalOpen(false)}\n />\n
\n )\n}\n\nK8sNodePolicyDetails.propTypes = {\n nodeData: PropTypes.object,\n podTemplate: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.error,\n data: ImmutablePropTypes.map,\n }),\n}\n","import _ from 'lodash'\n\nexport const getNiceLabel = camel => {\n return _.split(_.snakeCase(camel), '_')\n .map(_.capitalize)\n .join(' ')\n}\n\n/**\n * Convert the actual byte number like 41984019480194 into\n * something meaningful like \"4 GB\"\n */\nconst denominations = ['bytes', 'KB', 'MB', 'GB', 'TB']\nexport const convertToNiceBytes = number => {\n let denomIndex = 0\n while (number > 1024 && denomIndex < denominations.length) {\n number = Math.floor(number / 1024)\n\n denomIndex++\n }\n return `${number} ${denominations[denomIndex]}`\n}\n\n\n/**\n * Resource limits and requests have a weird format so this converts it\n * into somehting that would make sense to the user\n */\nexport const convertResourceAmountToNiceDisplay = ({ format, number }) => {\n switch (format) {\n case 'DECIMAL_SI':\n return number\n case 'BINARY_SI':\n return convertToNiceBytes(number)\n default:\n return JSON.stringify({ format, number })\n }\n}\n","import React, { Fragment, useState } from 'react'\nimport _ from 'lodash'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { fromJS } from 'immutable'\n\nimport ShowPathModal from 'containers/AccessActivity/ShowPathModal'\n\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport { NodeViewDetailLabel } from 'components/NodeView'\nimport { TextLineShimmer } from 'components/ShimmerLoader'\nimport TextLink from 'components/TextLink'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\nimport messages from './messages'\nimport { convertResourceAmountToNiceDisplay } from './utils'\n\nconst CLASSIFICATION = 'Persistent Volume Claims'\n\n/**\n * this the main line item for a PVC\n */\nfunction K8sPVDetail({ pvc, onSelectedPVC }) {\n const { name } = pvc\n const metadata = metdataNestedObject(pvc.metadata)\n const storage = _.get(\n metadata,\n ['persistentVolumeClaim', 'spec', 'resources', 'requests', 'storage'],\n null\n )\n\n const volumeMode = _.get(\n metadata,\n ['persistentVolumeClaim', 'spec', 'volumeMode'],\n null\n )\n\n // only render some extra details in brackets if we can like (FileSystem 2GB)\n let detailsPart = []\n if (storage != null || volumeMode != null) {\n detailsPart.push(' (')\n\n // try to add type of volume\n if (volumeMode) {\n detailsPart.push(volumeMode)\n if (storage) {\n // if also storage, put a space\n detailsPart.push(' ')\n }\n }\n\n // put the storage part\n if (storage) {\n detailsPart.push(convertResourceAmountToNiceDisplay(storage))\n }\n\n detailsPart.push(')') // close bracket\n }\n return (\n
\n onSelectedPVC(pvc)}>\n {name}\n \n {detailsPart.join('')}\n
\n )\n}\n\nK8sPVDetail.propTypes = {\n onSelectedPVC: PropTypes.func.isRequired,\n pvc: PropTypes.shape({\n name: PropTypes.string,\n metadata: PropTypes.arrayOf(PropTypes.string).isRequired,\n }).isRequired,\n}\n\n/**\n * this he body\n */\nfunction K8sPVDetailsBody(props) {\n if (!props.podTemplate) {\n // eslint-disable-next-line no-console\n console.warn('K8sPVDetails: expected to receive prop podTemplate')\n return null\n }\n\n // render loading state\n if (props.podTemplate.get('loading')) {\n return \n }\n\n // render error loading state\n if (props.podTemplate.get('error')) {\n return \n }\n\n const path = ['data', 'hasAttachedStorage', 'items']\n // pvc = persistent volume claim\n const pvcs = props.podTemplate.getIn(path, null)\n if (pvcs === null) {\n // eslint-disable-next-line no-console\n console.warn('K8sServiceDetails: podTemplate no data @ ' + path.join('/'))\n return \n }\n\n return pvcs\n .toJS()\n .map((pvc, i) => (\n \n ))\n}\n\nexport default function K8sPVDetails(props) {\n const [modalOpen, setModalOpen] = useState(false)\n const [paths, setPaths] = useState([])\n const [selectedPVC, setSelectedPVC] = useState({})\n const onSelectedPVC = pvc => {\n setSelectedPVC(pvc)\n setModalOpen(true)\n setPaths(fromJS([[props.nodeData.srn]]))\n }\n return (\n \n
\n \n \n \n \n setModalOpen(false)}\n />\n
\n )\n}\n\nK8sPVDetails.propTypes = {\n nodeData: PropTypes.object,\n podTemplate: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.error,\n data: ImmutablePropTypes.map,\n }),\n}\n","import React, { Fragment, useState } from 'react'\nimport _ from 'lodash'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { fromJS } from 'immutable'\n\nimport ShowPathModal from 'containers/AccessActivity/ShowPathModal'\n\nimport DyanmicFormattedMessage from 'components/DynamicFormattedMessage'\nimport { NodeViewDetailLabel } from 'components/NodeView'\nimport { TextLineShimmer } from 'components/ShimmerLoader'\nimport TextLink from 'components/TextLink'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport messages from './messages'\n\nconst CLASSIFICATION = 'Service Selected'\n\nfunction K8sServiceDetail({ service, onServiceSelect }) {\n if (!service.metadata) {\n // eslint-disable-next-line no-console\n console.warn(\n 'K8sServiceDetail: some service didnt have metadata:',\n service.toJS()\n )\n return null\n }\n const metadata = metdataNestedObject(service.metadata)\n const ports = _.get(metadata, ['service', 'spec', 'ports'], [])\n\n // try a coupla different techniques to get the service's name\n let name = service.name\n if (!name) {\n name = _.get(metadata, ['service', 'metadata', 'name'])\n }\n return (\n
\n onServiceSelect(service)}>\n {name}\n \n {' ('}\n {ports.map((port, i) => {\n return (\n \n {port.protocol} {port.port}:{port.targetPort}\n {i !== ports.length - 1 ? ', ' : ''}\n \n )\n })}\n {')'}\n
\n )\n}\nK8sServiceDetail.propTypes = {\n onServiceSelect: PropTypes.func.isRequired,\n service: ImmutablePropTypes.contains({\n name: PropTypes.string,\n metadata: PropTypes.arrayOf(PropTypes.string).isRequired,\n }).isRequired,\n}\n\nfunction K8SServiceDetailsBody(props) {\n // cannot render anything w/ invalid props\n if (!props.podTemplate) {\n // eslint-disable-next-line no-console\n console.warn('K8sServiceDetails: expected to receive prop podTemplate')\n return null\n }\n\n // render loading state\n if (props.podTemplate.get('loading')) {\n return \n }\n\n // render error loading state\n if (props.podTemplate.get('error')) {\n return \n }\n\n const path = ['data', 'isSelectedByNetworkGroup', 'items']\n const services = props.podTemplate.getIn(path, null)\n\n if (services === null) {\n // eslint-disable-next-line no-console\n console.warn('K8sServiceDetails: podTemplate no data @ ' + path.join('/'))\n return \n }\n\n return services.map((service, i) => (\n \n ))\n}\n\nexport default function K8sServiceDetails(props) {\n const [modalOpen, setModalOpen] = useState(false)\n const [paths, setPaths] = useState([])\n const [selectedService, setSelectedService] = useState({})\n const onServiceSelect = service => {\n setSelectedService(service)\n setModalOpen(true)\n setPaths(fromJS([[props.nodeData.srn]]))\n }\n return (\n \n
\n \n \n \n \n setModalOpen(false)}\n />\n
\n )\n}\n\nK8sServiceDetails.propTypes = {\n nodeData: PropTypes.object,\n podTemplate: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.error,\n data: ImmutablePropTypes.map,\n }),\n}\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\n\nimport messages from './messages'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\nimport { getNiceLabel } from './utils'\n\nexport class K8sWorkloadAffinity extends Component {\n getAffinityConfig = () => {\n const metadata = metdataNestedObject(this.props.nodeData.metadata)\n return _.get(metadata, [\n Object.keys(metadata)[0],\n 'spec',\n 'template',\n 'spec',\n 'affinity',\n ])\n }\n\n getAffinities = affinityConfig => {\n const affinities = []\n if (affinityConfig.nodeAffinity) {\n affinities.push({\n type: 'node',\n ...affinityConfig.nodeAffinity,\n })\n }\n if (affinityConfig.podAffinity) {\n affinities.push({\n type: 'pod',\n ...affinityConfig.podAffinity,\n })\n }\n return affinities\n }\n\n getAntiAffinities = affinityConfig => {\n const affinities = []\n if (affinityConfig.nodeAntiAffinity) {\n affinities.push({\n type: 'node',\n ...affinityConfig.nodeAntiAffinity,\n })\n }\n if (affinityConfig.podAntiAffinity) {\n affinities.push({\n type: 'pod',\n ...affinityConfig.podAntiAffinity,\n })\n }\n return affinities\n }\n\n getOtherData = value => {\n const dataSections = []\n const topologyKey = _.get(value, ['topologyKey'], null)\n if (topologyKey != null) {\n dataSections.push(\n \n
Topology Key:
\n
{topologyKey}
\n
\n )\n }\n\n const matchLabels = _.get(value, ['labelSelector', 'matchLabels'], null)\n if (matchLabels != null) {\n const matchLabelsText = Object.keys(matchLabels).map(key => {\n return `${key}:${matchLabels[key]}`\n })\n dataSections.push(\n \n
Match Labels:
\n
{matchLabelsText.join(',')}
\n
\n )\n }\n\n return dataSections\n }\n\n renderAffinityInfo = ({ anti = false, type, key, value }) => {\n const dataSections = []\n if (value.podAffinityTerm) {\n this.getOtherData(value.podAffinityTerm).forEach(d =>\n dataSections.push(d)\n )\n } else {\n this.getOtherData(value).forEach(d => dataSections.push(d))\n }\n\n let title = [_.capitalize(type), anti ? 'Anti' : '', 'Affinity'].join(' ')\n const description = getNiceLabel(key)\n return (\n \n \n {title} - {description}\n \n {dataSections}\n
\n \n )\n }\n\n render() {\n const affinityConfig = this.getAffinityConfig()\n const affinities = this.getAffinities(affinityConfig)\n const antiAffinities = this.getAntiAffinities(affinityConfig)\n\n const affinityComponents = affinities.flatMap(affinity => {\n const { type } = affinity\n return Object.keys(_.omit(affinity, ['type'])).map(key => {\n const value = affinity[key]\n return this.renderAffinityInfo({ type, key, value })\n })\n })\n\n const antiAffinityComponents = antiAffinities.flatMap(affinity => {\n const { type } = affinity\n return Object.keys(_.omit(affinity, ['type'])).flatMap(key => {\n const values = affinity[key]\n return [...values].map(value =>\n this.renderAffinityInfo({ anti: true, type, key, value })\n )\n })\n })\n\n return (\n \n \n \n \n \n {affinityComponents}\n {antiAffinityComponents}\n
\n \n )\n }\n}\n\nK8sWorkloadAffinity.propTypes = {\n nodeData: PropTypes.shape({\n metadata: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default K8sWorkloadAffinity\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\nimport Select from 'react-select'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport messages from './messages'\nimport { convertResourceAmountToNiceDisplay, getNiceLabel } from './utils'\n\n// eslint-disable-next-line react/display-name\nconst probeDisplay = name => value => {\n const { httpGet } = value\n let endpoint = null\n if (httpGet) {\n endpoint = `${httpGet.scheme} GET ${httpGet.port} ${httpGet.path}`\n }\n return (\n \n \n {getNiceLabel(name)}:\n \n {endpoint && (\n \n
Endpoint
\n
{endpoint}
\n
\n )}\n
\n {getNiceLabel('failureThreshold')}\n
\n
{value.failureThreshold}
\n
\n {getNiceLabel('successThreshold')}\n
\n
{value.successThreshold}
\n
\n {getNiceLabel('initialDelaySeconds')}\n
\n
{value.initialDelaySeconds}s
\n
{getNiceLabel('periodSeconds')}
\n
{value.periodSeconds}s
\n\n
\n {getNiceLabel('timeoutSeconds')}\n
\n
{value.timeoutSeconds}s
\n
\n )\n}\n\nconst sectionsOfResourceLimits = limits => {\n const sections = []\n if (limits.cpu) {\n sections.push(
CPU
)\n sections.push(
{convertResourceAmountToNiceDisplay(limits.cpu)}
)\n }\n\n if (limits.memory) {\n sections.push(
Memory
)\n sections.push(\n
{convertResourceAmountToNiceDisplay(limits.memory)}
\n )\n }\n return sections\n}\n\nconst keyValuesDetailsOmit = [\n 'livenessProbe',\n 'readinessProbe',\n 'resources',\n 'ports',\n 'volumeMounts',\n]\n\nconst specialValueRenderers = {\n args: value => value.join(' '),\n command: value => value.join(' '),\n livenessProbe: probeDisplay('livenessProbe'),\n readinessProbe: probeDisplay('readinessProbe'),\n ports: values => {\n const sections = []\n sections.push(\n \n Ports\n \n )\n\n values\n .flatMap(port => {\n const innerSections = []\n Object.keys(port).map((key, i) => {\n const labelClass =\n i === 0 ? 'probe-section-label' : 'probe-section-label-nodash'\n innerSections.push(\n
{getNiceLabel(key)}
\n )\n innerSections.push(\n
{port[key]}
\n )\n })\n return innerSections\n })\n .forEach(section => sections.push(section))\n return sections\n },\n resources: value => {\n const sections = []\n if (value.limits) {\n sections.push(\n \n Resource Limits\n \n )\n sectionsOfResourceLimits(value.limits).forEach(section =>\n sections.push(section)\n )\n }\n\n if (value.requests) {\n sections.push(\n \n Resource Requests\n \n )\n sectionsOfResourceLimits(value.requests).forEach(section =>\n sections.push(section)\n )\n }\n\n return sections\n },\n volumeMounts: values => {\n const sections = []\n sections.push(\n \n Volume Mounts\n \n )\n\n values.forEach(value => {\n sections.push(
Name
)\n sections.push(
{value.name}
)\n Object.keys(_.omit(value, ['name'])).forEach(key => {\n sections.push(\n
\n {getNiceLabel(key)}\n
\n )\n sections.push(
{value[key]}
)\n })\n })\n return sections\n },\n}\n\nexport class K8sWorkloadContainers extends React.Component {\n constructor(props) {\n super(props)\n\n const containers = this.getContainers()\n\n this.state = {\n invalidMetadata: false,\n selectedContainer: containers[0],\n }\n }\n\n getContainers = () => {\n const metadata = metdataNestedObject(this.props.nodeData.metadata)\n const containers = _.get(metadata, [\n Object.keys(metadata)[0],\n 'spec',\n 'template',\n 'spec',\n 'containers',\n ])\n if (null == containers) {\n this.setState({ invalidMetadata: true })\n return null\n }\n\n const initContainers = _.get(\n metadata,\n [Object.keys(metadata)[0], 'spec', 'template', 'spec', 'initContainers'],\n []\n ).map(c => ({ initContainer: 'true', ...c }))\n return [...containers, ...initContainers]\n }\n\n renderContainerSelect = containers => {\n return (\n {\n const cont = containers.find(c => c.name === value.value)\n if (cont) {\n this.setState({ selectedContainer: cont })\n }\n }}\n value={{\n value: this.state.selectedContainer.name,\n label:\n this.state.selectedContainer.name +\n (this.state.selectedContainer.initContainer === 'true'\n ? ' (Init Container)'\n : ''),\n }}\n options={containers.map(({ name, initContainer }) => {\n return {\n value: name,\n label: name + (initContainer === 'true' ? ' (Init Container)' : ''),\n }\n })}\n />\n )\n }\n\n renderContainerData = () => {\n const data = _.omit(this.state.selectedContainer, [\n 'env',\n ...keyValuesDetailsOmit,\n ])\n const segments = Object.keys(data).map((key, i) => {\n let valueToRender\n if (specialValueRenderers[key]) {\n valueToRender = specialValueRenderers[key](data[key])\n } else {\n valueToRender = _.isObject(data[key])\n ? JSON.stringify(data[key])\n : data[key]\n }\n return (\n \n
{getNiceLabel(key)}
\n
{valueToRender}
\n
\n )\n })\n return segments\n }\n\n renderContainerOtherData = () => {\n const data = _.pick(this.state.selectedContainer, keyValuesDetailsOmit)\n const segments = Object.keys(data).map(key => {\n if (specialValueRenderers[key]) {\n return specialValueRenderers[key](data[key])\n }\n })\n return segments\n }\n\n renderContainerEnvironment = () => {\n const env = this.state.selectedContainer.env || []\n const segments = env.map(({ name, value }) => {\n return (\n \n
\n {name}\n
\n
\n {value}\n
\n
\n )\n })\n return segments\n }\n\n render() {\n const containers = this.getContainers()\n\n return (\n \n
\n \n \n \n
{this.renderContainerSelect(containers)}
\n
\n \n \n {this.renderContainerData()}\n {this.renderContainerOtherData()}\n \n \n \n Environment:\n \n \n {this.renderContainerEnvironment()}\n \n \n \n
\n )\n }\n}\n\nK8sWorkloadContainers.propTypes = {\n nodeData: PropTypes.shape({\n metadata: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default K8sWorkloadContainers\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport messages from './messages'\nimport { getNiceLabel } from './utils'\nimport './styles.css'\n\nconst specialValueRenderers = {\n selector: value => {\n return Object.keys(value.matchLabels).map(key => {\n return `${key}:${value.matchLabels[key]}`\n })\n },\n\n strategy: value => {\n const strat = Object.values(value)[0]\n let segments = [\n `${getNiceLabel(value.type)}`,\n ...Object.keys(strat).map(key => `${getNiceLabel(key)}: ${strat[key]}`),\n ]\n return segments.join(',\\u00A0\\u00A0')\n },\n\n updateStrategy: value => {\n return value.type\n },\n}\n\nexport class K8sWorkloadSpec extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n invalidMetadata: false,\n }\n }\n\n /**\n * Get from the metadata the important shit that should be rendered\n * in this component\n */\n getSpecData = () => {\n const metadata = metdataNestedObject(this.props.nodeData.metadata)\n const spec = _.get(metadata, [Object.keys(metadata)[0], 'spec'], null)\n if (null === spec) {\n this.setState({ invalidMetadata: true })\n return null\n }\n return _.omit(spec, ['template'])\n }\n\n renderSpecDataSections = () => {\n const specData = this.getSpecData()\n if (null === specData) {\n return null\n }\n\n const sections = Object.keys(specData)\n .sort()\n .map((key, i) => {\n let valueToRender\n if (specialValueRenderers[key]) {\n valueToRender = specialValueRenderers[key](specData[key])\n } else {\n valueToRender = _.isObject(specData[key])\n ? JSON.stringify(specData[key])\n : specData[key]\n }\n return (\n \n
{getNiceLabel(key)}
\n
{valueToRender}
\n
\n )\n })\n\n return sections\n }\n\n render() {\n return (\n \n \n \n \n \n {this.renderSpecDataSections()}\n \n \n )\n }\n}\n\nK8sWorkloadSpec.propTypes = {\n nodeData: PropTypes.object.isRequired,\n}\n\nexport default K8sWorkloadSpec\n","import React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport _ from 'lodash'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SectionHeader from 'components/SectionHeader'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport messages from './messages'\nimport { getNiceLabel } from './utils'\nimport './styles.css'\n\nconst specialValueRenderers = {\n // eslint-disable-next-line react/display-name\n securityContext: value => {\n const textBits = []\n Object.keys(value).forEach(key => {\n textBits.push(`${key}: ${value[key]}`)\n })\n\n return
{textBits.join(',\\u00A0\\u00A0')}
\n },\n\n selector: value => {\n return Object.keys(value.matchLabels).map(key => {\n return `${key}:${value.matchLabels[key]}`\n })\n },\n\n strategy: value => {\n const strat = Object.values(value)[0]\n let segments = [\n `${getNiceLabel(value.type)}`,\n ...Object.keys(strat).map(key => `${getNiceLabel(key)}: ${strat[key]}`),\n ]\n return segments.join(',\\u00A0\\u00A0')\n },\n\n // eslint-disable-next-line react/display-name\n volumes: value => {\n const lis = value.map((volume, i) => {\n const { name, configMap } = volume\n\n let configMapData = []\n if (configMap) {\n Object.keys(configMap).forEach(key => {\n configMapData.push(`${key}: ${configMap[key]}`)\n })\n }\n return (\n
  • \n {name} {configMapData.length > 0 && ' - '}\n {configMapData.join(', ')}\n
  • \n )\n })\n\n return
      {lis}
    \n },\n}\n\nexport class K8sWorkloadTemplateSpec extends Component {\n constructor(props) {\n super(props)\n this.state = { invalidMetadata: true }\n }\n\n getData = () => {\n const metadata = metdataNestedObject(this.props.nodeData.metadata)\n const data = _.get(metadata, [\n Object.keys(metadata)[0],\n 'spec',\n 'template',\n 'spec',\n ])\n if (null == data) {\n this.setState({ invalidMetadata: true })\n return null\n }\n\n return _.omit(data, [\n 'metadata',\n 'containers',\n 'initContainers',\n 'affinity',\n ])\n }\n\n renderDataSections = () => {\n const data = this.getData()\n if (null === data) {\n return null\n }\n\n const sections = Object.keys(data)\n .sort()\n .map((key, i) => {\n let valueToRender\n if (specialValueRenderers[key]) {\n valueToRender = specialValueRenderers[key](data[key])\n } else {\n valueToRender = _.isObject(data[key])\n ? JSON.stringify(data[key])\n : data[key]\n }\n return (\n \n
    {getNiceLabel(key)}
    \n
    {valueToRender}
    \n
    \n )\n })\n\n return sections\n }\n\n render() {\n return (\n \n \n \n \n \n {this.renderDataSections()}\n \n \n )\n }\n}\n\nK8sWorkloadTemplateSpec.propTypes = {\n nodeData: PropTypes.shape({\n metadata: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default K8sWorkloadTemplateSpec\n","import { createSelector } from 'reselect'\nimport { Map } from 'immutable'\n\nconst selectK8sWorkloadNodeview = state =>\n state.get('k8sWorkloadNodeView') || Map()\n\nexport const selectPodTemplate = createSelector(\n selectK8sWorkloadNodeview,\n state => {\n return state.get('podTemplate') || Map()\n }\n)\n\nexport const selectClusterInfrastructure = createSelector(\n selectK8sWorkloadNodeview,\n state => {\n return state.get('clusterInfrastructure') || Map()\n }\n)\n","import React, { Component } from 'react'\nimport _ from 'lodash'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\n\nimport BorderedCard from 'components/BorderedCard'\nimport DataTable from 'components/DataTable'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\n\nimport messages from './messages'\n\nconst styles = {\n card: {\n height: '100%',\n },\n gridContainer: {\n height: '100vh',\n },\n}\n\nclass K8sPodTemplateTab extends Component {\n getTableData = () => {\n return this.props.clusterInfrastructure\n .get('data')\n .toJS()\n .map(row => {\n return _.pick(row, [\n 'name',\n 'label',\n 'type',\n 'active',\n 'createDate',\n 'srn',\n ])\n })\n }\n renderBody = () => {\n if (this.props.clusterInfrastructure.get('loading')) {\n return \n }\n\n if (this.props.clusterInfrastructure.get('error')) {\n return \n }\n\n return \n }\n\n render() {\n return (\n
    \n {this.renderBody()}\n
    \n )\n }\n}\n\nK8sPodTemplateTab.propTypes = {\n clusterInfrastructure: ImmutablePropTypes.contains({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n data: ImmutablePropTypes.map,\n }),\n}\n\nexport default K8sPodTemplateTab\n","import React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { connect } from 'react-redux'\nimport { compose, bindActionCreators } from 'redux'\nimport { createStructuredSelector } from 'reselect'\nimport _ from 'lodash'\n\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport { DAEMON } from 'utils/constants'\nimport reducer from './reducers'\nimport sagas from './sagas'\n\nimport ToolTip from 'react-tooltip'\nimport NodeViewHeader from 'containers/NodeViewHeader'\nimport NodeView from 'containers/NodeSolutionCenter/NodeView'\n\nimport BorderedCard from 'components/BorderedCard'\nimport CopyToClipboard from 'components/CopyToClipboard'\nimport DynamicFormattedMessage from 'components/DynamicFormattedMessage'\nimport JsonView from 'components/JsonView'\nimport Icon from 'components/Icon'\nimport SearchInput from 'components/SearchInput'\nimport TextLink from 'components/TextLink'\nimport YamlView from 'components/YamlView'\n\nimport K8sNodePolicyDetails from './K8sNodePolicyDetails'\nimport K8sPVDetails from './K8sPVDetails'\nimport K8sServiceDetails from './K8sServiceDetails'\nimport K8sWorkloadAffinity from './K8sWorkloadAffinity'\nimport K8sWorkloadContainers from './K8sWorkloadContainers'\nimport K8sWorkloadSpec from './K8sWorkloadSpec'\nimport K8sWorkloadTemplateSpec from './K8sWorkloadTemplateSpec'\n\nimport { metdataNestedObject } from 'utils/sonraiUtils'\n\nimport { getClusterInfrastructure, getPodTemplateData } from './actions'\nimport { selectClusterInfrastructure, selectPodTemplate } from './selectors'\n\nimport messages from './messages'\nimport K8sWorkloadInfrastructureTab from './K8sWorkloadInfrastructureTab'\n\nconst DISP_HUMAN = 'DISP_HUMAN'\nconst DISP_YAML = 'DISP_YAML'\nconst DISP_JSON = 'DISP_JSON'\n\nexport class K8sWorkloadNodeViewCardLayout extends React.Component {\n constructor(props) {\n super(props)\n this.state = {\n displayMode: DISP_HUMAN,\n searchText: '',\n stringifiedText: '',\n searchMatches: 0, // how many things in the text view match the search\n currentSeachMatch: 0, // which search user is currenly scrolled to\n }\n\n this.textCardRef = React.createRef()\n\n this.styles = {\n textCopyButtonContainer: {\n position: 'absolute',\n top: '4px',\n right: '8px',\n cursor: 'pointer',\n zIndex: 1,\n },\n }\n }\n\n componentDidMount() {\n this.props.getClusterInfrastructure({\n srn: this.props.nodeId,\n })\n this.props.getPodTemplateData({\n srn: this.props.nodeId,\n })\n }\n\n componentDidUpdate(prevProps, prevState) {\n // if the user does a new search - set the state to keep track of the\n // matches and scroll to the first match\n if (this.state.searchText != prevState.searchText) {\n const textDiv = this.textCardRef.current\n const matches = textDiv.getElementsByClassName('filter-match') || []\n this.setState({ searchMatches: matches.length })\n\n const firstMatch = matches[0]\n if (firstMatch != undefined) {\n this.setState({ currentSeachMatch: 1 })\n textDiv.scrollTop = firstMatch.offsetTop - firstMatch.offsetHeight\n } else {\n textDiv.scrollTop = 0 // there was no matches so scroll to top\n this.setState({ currentSeachMatch: 0 })\n }\n }\n\n const choseNewMatch =\n this.state.currentSeachMatch != prevState.currentSeachMatch\n const switchedTextView =\n this.state.displayMode != prevState.displayMode &&\n [DISP_JSON, DISP_YAML].includes(this.state.displayMode)\n\n // if the user has tried to navigate to a new search result, scroll to it\n if (choseNewMatch || switchedTextView) {\n const textDiv = this.textCardRef.current\n if (this.state.currentSeachMatch !== 0) {\n const matches = textDiv.getElementsByClassName('filter-match') || []\n const scrollTo = matches[this.state.currentSeachMatch - 1]\n if (!scrollTo) {\n // eslint-disable-next-line no-console\n console.warn(\n 'could not find filter highlght at index ' +\n this.state.currentSeachMatch\n )\n } else {\n textDiv.scrollTop = scrollTo.offsetTop - scrollTo.offsetHeight\n }\n }\n }\n }\n\n setSearchText = event => {\n this.setState({ searchText: event.target.value })\n }\n\n scrollToNextMatch = () => {\n if (this.state.currentSeachMatch < this.state.searchMatches) {\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.setState({ currentSeachMatch: this.state.currentSeachMatch + 1 })\n }\n }\n\n scrollToPrevMatch = () => {\n if (this.state.currentSeachMatch > 1) {\n // eslint-disable-next-line react/no-access-state-in-setstate\n this.setState({ currentSeachMatch: this.state.currentSeachMatch - 1 })\n }\n }\n\n /**\n * The user can use the arrow keys to seach around in the document\n */\n handleSearchKeyDown = event => {\n let handled = false\n\n if (13 /* enter */ === event.keyCode) {\n handled = true\n if (event.shiftKey) {\n // shift + enter = go back\n this.scrollToPrevMatch()\n } else {\n // enter = go forward\n this.scrollToNextMatch()\n }\n }\n\n if (38 /* arrow up */ === event.keyCode) {\n handled = true\n this.scrollToPrevMatch()\n }\n\n if (40 /* arrow down */ === event.keyCode) {\n handled = true\n this.scrollToNextMatch()\n }\n\n if (handled) {\n event.preventDefault()\n }\n }\n\n onStringify = stringifiedText => {\n if (stringifiedText != this.stringifiedText) {\n this.setState({ stringifiedText })\n }\n }\n\n /**\n * There are different displays - like a normal node views (cards) like a\n * humarn would read, or a Yaml or JSON node view like a computer or a\n * developer would read.\n */\n getGridContent = () => {\n switch (this.state.displayMode) {\n case DISP_HUMAN: {\n const gridContent = [\n ,\n ,\n ,\n ]\n if (this.hasAffinity()) {\n gridContent.push(\n \n )\n }\n\n return gridContent\n }\n case DISP_YAML:\n return [\n
    \n
    \n \n
    \n \n \n \n
    \n \n ,\n ]\n case DISP_JSON:\n return [\n
    \n
    \n \n
    \n \n \n \n
    \n \n ,\n ]\n }\n }\n\n getLayouts = () => {\n const controlHeight = this.state.displayMode === DISP_HUMAN ? 0.15 : 0.25\n const layouts = {\n controls: {\n lg: { w: 2, h: controlHeight },\n xs: { w: 2, h: controlHeight },\n },\n yaml: {\n lg: { w: 2, h: 5 },\n xs: { w: 2, h: 5 },\n },\n spec: {\n lg: { w: 1, h: 1.5 },\n xs: { w: 1, h: 1.5 },\n },\n templateSpec: {\n lg: { w: 1, h: 1.5 },\n xs: { w: 1, h: 1.5 },\n },\n containers: {\n lg: { w: 2, h: 3.5 },\n xs: { w: 2, h: 3.5 },\n },\n }\n\n if (this.hasAffinity()) {\n layouts.affinity = {\n lg: { w: 1, h: 1.5 },\n xs: { w: 1, h: 1.5 },\n }\n }\n\n return layouts\n }\n\n getCols = () => {\n return {\n lg: 2,\n xs: 2,\n }\n }\n\n getTabs = () => {\n return [\n
    \n \n
    ,\n ]\n }\n\n hasAffinity = () => {\n if (this.props.nodeData && this.props.nodeData.metadata) {\n const metadata = metdataNestedObject(this.props.nodeData.metadata)\n const affinity = _.get(\n metadata,\n [Object.keys(metadata)[0], 'spec', 'template', 'spec', 'affinity'],\n null\n )\n if (affinity != null) {\n return true\n }\n }\n return false\n }\n\n setViewHuman = () => {\n this.setState({ displayMode: DISP_HUMAN })\n }\n\n setViewJson = () => {\n this.setState({ displayMode: DISP_JSON })\n }\n\n setViewYAML = () => {\n this.setState({ displayMode: DISP_YAML })\n }\n\n renderViewControl = () => {\n return (\n \n {this.state.displayMode != DISP_HUMAN && (\n \n \n \n \n {this.state.searchText != '' && (\n \n \n \n \n \n \n \n \n {this.state.currentSeachMatch} of {this.state.searchMatches}\n \n \n )}\n \n )}\n \n \n \n \n \n \n\n \n \n \n \n \n Y\n \n \n \n \n \n \n \n \n \n \n )\n }\n\n getHeaderContent = () => {\n return [\n ,\n ,\n ,\n ]\n }\n\n render() {\n return (\n \n \n
    \n \n
    \n
    \n )\n }\n}\n\nK8sWorkloadNodeViewCardLayout.propTypes = {\n // ~~ passed props ~~\n horizontal: PropTypes.bool,\n nodeData: PropTypes.object.isRequired,\n nodeId: PropTypes.string.isRequired,\n\n // ~~ bound action creators ~~\n getClusterInfrastructure: PropTypes.func.isRequired,\n getPodTemplateData: PropTypes.func.isRequired,\n\n // ~~ props from redux ~~\n clusterInfrastructure: ImmutablePropTypes.map,\n podTemplate: ImmutablePropTypes.map,\n}\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n getClusterInfrastructure,\n getPodTemplateData,\n },\n dispatch\n )\n}\n\nconst mapStateToProps = createStructuredSelector({\n clusterInfrastructure: selectClusterInfrastructure,\n podTemplate: selectPodTemplate,\n})\n\nconst withConnect = connect(\n mapStateToProps,\n mapDispatchToProps\n)\n\nconst withReducer = injectReducer({ key: 'k8sWorkloadNodeView', reducer })\nconst withSaga = injectSaga({\n key: 'k8sWorkloadNodeView',\n saga: sagas,\n DAEMON,\n})\n\nexport default compose(\n withConnect,\n withReducer,\n withSaga\n)(K8sWorkloadNodeViewCardLayout)\n"],"sourceRoot":""}