{"version":3,"file":"index-CNsXoVxq.cjs","sources":["../src/app/icons/NodeIcon.jsx","../src/app/pages/OverviewPage/OverviewPanel.jsx","../src/app/pages/OverviewPage/NodesByTypePanel.jsx","../src/app/pages/OverviewPage/GovernanceWarningsPanel.jsx","../src/app/pages/OverviewPage/TrendsPanel.jsx","../src/app/pages/OverviewPage/DimensionNodeUsagePanel.jsx","../src/app/pages/OverviewPage/index.jsx"],"sourcesContent":["const NodeIcon = ({\n  width = '45px',\n  height = '45px',\n  color = '#cccccc',\n  style = {},\n}) => (\n  <svg\n    width={width}\n    height={height}\n    viewBox=\"0 0 30 30\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    style={style}\n    data-testid=\"node-icon\"\n  >\n    <path\n      opacity=\"0.317243\"\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M15 30C23.2843 30 30 23.2843 30 15C30 6.71573 23.2843 0 15 0C6.71573 0 0 6.71573 0 15C0 23.2843 6.71573 30 15 30Z\"\n      fill={color}\n    ></path>\n    <path\n      fillRule=\"evenodd\"\n      clipRule=\"evenodd\"\n      d=\"M16.3333 7.6665C16.5144 7.6665 16.6787 7.73873 16.7988 7.85594C16.9229 7.97702 17 8.1461 17 8.33317V9.94265L18.7239 11.6665H20.3333C20.7015 11.6665 21 11.965 21 12.3332V20.3332C21 21.4377 20.1046 22.3332 19 22.3332H11C9.89543 22.3332 9 21.4377 9 20.3332V9.6665C9 8.56193 9.89543 7.6665 11 7.6665H16.3333ZM11 8.99984H15.6667L19.6667 12.9998V20.3332C19.6667 20.7014 19.3682 20.9998 19 20.9998H11C10.6318 20.9998 10.3333 20.7014 10.3333 20.3332V9.6665C10.3333 9.29831 10.6318 8.99984 11 8.99984ZM12.3333 14.9998H17.6667C18.0349 14.9998 18.3333 15.2983 18.3333 15.6665C18.3333 16.0347 18.0349 16.3332 17.6667 16.3332H12.3333C11.9651 16.3332 11.6667 16.0347 11.6667 15.6665C11.6667 15.2983 11.9651 14.9998 12.3333 14.9998ZM17.6667 17.6665H12.3333C11.9651 17.6665 11.6667 17.965 11.6667 18.3332C11.6667 18.7014 11.9651 18.9998 12.3333 18.9998H17.6667C18.0349 18.9998 18.3333 18.7014 18.3333 18.3332C18.3333 17.965 18.0349 17.6665 17.6667 17.6665ZM12.3333 12.3332H13.6667C14.0349 12.3332 14.3333 12.6316 14.3333 12.9998C14.3333 13.368 14.0349 13.6665 13.6667 13.6665H12.3333C11.9651 13.6665 11.6667 13.368 11.6667 12.9998C11.6667 12.6316 11.9651 12.3332 12.3333 12.3332Z\"\n      fill={color}\n    ></path>\n    <mask\n      id=\"mask0\"\n      type=\"alpha\"\n      maskUnits=\"userSpaceOnUse\"\n      x=\"9\"\n      y=\"7\"\n      width=\"12\"\n      height=\"16\"\n    >\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M16.3333 7.6665C16.5144 7.6665 16.6787 7.73873 16.7988 7.85594C16.9229 7.97702 17 8.1461 17 8.33317V9.94265L18.7239 11.6665H20.3333C20.7015 11.6665 21 11.965 21 12.3332V20.3332C21 21.4377 20.1046 22.3332 19 22.3332H11C9.89543 22.3332 9 21.4377 9 20.3332V9.6665C9 8.56193 9.89543 7.6665 11 7.6665H16.3333ZM11 8.99984H15.6667L19.6667 12.9998V20.3332C19.6667 20.7014 19.3682 20.9998 19 20.9998H11C10.6318 20.9998 10.3333 20.7014 10.3333 20.3332V9.6665C10.3333 9.29831 10.6318 8.99984 11 8.99984ZM12.3333 14.9998H17.6667C18.0349 14.9998 18.3333 15.2983 18.3333 15.6665C18.3333 16.0347 18.0349 16.3332 17.6667 16.3332H12.3333C11.9651 16.3332 11.6667 16.0347 11.6667 15.6665C11.6667 15.2983 11.9651 14.9998 12.3333 14.9998ZM17.6667 17.6665H12.3333C11.9651 17.6665 11.6667 17.965 11.6667 18.3332C11.6667 18.7014 11.9651 18.9998 12.3333 18.9998H17.6667C18.0349 18.9998 18.3333 18.7014 18.3333 18.3332C18.3333 17.965 18.0349 17.6665 17.6667 17.6665ZM12.3333 12.3332H13.6667C14.0349 12.3332 14.3333 12.6316 14.3333 12.9998C14.3333 13.368 14.0349 13.6665 13.6667 13.6665H12.3333C11.9651 13.6665 11.6667 13.368 11.6667 12.9998C11.6667 12.6316 11.9651 12.3332 12.3333 12.3332Z\"\n        fill=\"white\"\n      ></path>\n    </mask>\n    <g mask=\"url(#mask0)\"></g>\n  </svg>\n);\n\nexport default NodeIcon;\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport NodeIcon from '../../icons/NodeIcon';\n\nimport ValidIcon from '../../icons/ValidIcon';\nimport InvalidIcon from '../../icons/InvalidIcon';\n\nconst COLOR_MAPPING = {\n  valid: '#00b368',\n  invalid: '#FF91A3', // '#b34b00',\n};\n\nexport const OverviewPanel = () => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [nodesByActive, setNodesByActive] = useState(null);\n  const [nodesByStatus, setNodesByStatus] = useState(null);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      setNodesByActive(await djClient.system.node_counts_by_active());\n      setNodesByStatus(await djClient.system.node_counts_by_status());\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  return (\n    <div className=\"chart-box\" style={{ flex: '0 0 2%' }}>\n      <div className=\"chart-title\">Overview</div>\n      <div className=\"horiz-box\">\n        {nodesByActive\n          ?.filter(entry => entry.name === 'true')\n          .map(entry => (\n            <div\n              className=\"jss316 badge\"\n              style={{ color: '#000', margin: '0.2em' }}\n            >\n              <NodeIcon color=\"#FFBB28\" style={{ marginTop: '0.75em' }} />\n              <div style={{ display: 'inline-grid', alignItems: 'center' }}>\n                <strong className=\"horiz-box-value\">{entry.value}</strong>\n                <span className={'horiz-box-label'}>Active Nodes</span>\n              </div>\n            </div>\n          ))}\n      </div>\n      <div className=\"horiz-box\">\n        {nodesByStatus?.map(entry => (\n          <div\n            className=\"jss316 badge\"\n            style={{ color: '#000', margin: '0.2em', marginLeft: '1.2em' }}\n          >\n            ↳\n            <span\n              style={{\n                color: COLOR_MAPPING[entry.name.toLowerCase()],\n                margin: '0 0.2em 0 0.4em',\n              }}\n            >\n              {entry.name === 'VALID' ? (\n                <ValidIcon\n                  width={'25px'}\n                  height={'25px'}\n                  style={{ marginTop: '0.2em' }}\n                />\n              ) : (\n                <InvalidIcon\n                  width={'25px'}\n                  height={'25px'}\n                  style={{ marginTop: '0.2em' }}\n                />\n              )}\n            </span>\n            <div style={{ display: 'inline-flex', alignItems: 'center' }}>\n              <strong\n                style={{\n                  color: COLOR_MAPPING[entry.name.toLowerCase()],\n                  margin: '0 2px',\n                  fontSize: '16px',\n                  textAlign: 'left',\n                }}\n              >\n                {entry.value}\n              </strong>\n              <span style={{ fontSize: 'smaller', padding: '5px 2px' }}>\n                {entry.name.toLowerCase()}\n              </span>\n            </div>\n          </div>\n        ))}\n      </div>\n    </div>\n  );\n};\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport NodeIcon from '../../icons/NodeIcon';\nimport '../../../styles/overview.css';\n\nconst COLOR_MAPPING = {\n  source: '#00C49F',\n  dimension: '#FFBB28', //'#FF8042',\n  transform: '#0088FE',\n  metric: '#FF91A3', //'#FFBB28',\n  cube: '#AA46BE',\n  valid: '#00B368',\n  invalid: '#B34B00',\n};\n\nexport const NodesByTypePanel = () => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [nodesByType, setNodesByType] = useState(null);\n  const [materializationsByType, setMaterializationsByType] = useState(null);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      setNodesByType(await djClient.system.node_counts_by_type());\n      setMaterializationsByType(\n        await djClient.system.materialization_counts_by_type(),\n      );\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  return (\n    <>\n      <div className=\"chart-box\" style={{ flex: '0 0 30%', maxWidth: '350px' }}>\n        <div className=\"chart-title\">Nodes by Type</div>\n        <div className=\"horiz-box\">\n          {nodesByType?.map(entry => (\n            <div className=\"vert-box\" key={entry.name}>\n              <NodeIcon color={COLOR_MAPPING[entry.name]} />\n              <strong style={{ color: COLOR_MAPPING[entry.name] }}>\n                {entry.value}\n              </strong>\n              <span>{entry.name}s</span>\n            </div>\n          ))}\n        </div>\n      </div>\n      <div className=\"chart-box\" style={{ flex: '0 0 30%', maxWidth: '350px' }}>\n        <div className=\"chart-title\">Materializations by Type</div>\n        <div className=\"horiz-box\">\n          {materializationsByType?.map(entry => (\n            <div className=\"vert-box\" key={entry.name}>\n              <NodeIcon color={COLOR_MAPPING[entry.name]} />\n              <strong style={{ color: COLOR_MAPPING[entry.name] }}>\n                {entry.value}\n              </strong>\n              <span>{entry.name}s</span>\n            </div>\n          ))}\n        </div>\n      </div>\n    </>\n  );\n};\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport '../../../styles/node-creation.scss';\nconst COLOR_MAPPING = {\n  source: '#00C49F',\n  dimension: '#FFBB28', //'#FF8042',\n  transform: '#0088FE',\n  metric: '#ff91a3', //'#FFBB28',\n  cube: '#AA46BE',\n  valid: '#00b368',\n  invalid: '#b34b00',\n};\n\nexport const GovernanceWarningsPanel = () => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [nodesWithoutDescription, setNodesWithoutDescription] = useState(null);\n  const [dimensionNodes, setDimensionNodes] = useState(null);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      setNodesWithoutDescription(\n        await djClient.system.nodes_without_description(),\n      );\n      setDimensionNodes(await djClient.system.dimensions());\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  return (\n    <div className=\"chart-box\" style={{ flex: '1 1 10%', maxWidth: '470px' }}>\n      <div className=\"chart-title\">Governance Warnings</div>\n      <div\n        className=\"horiz-box\"\n        style={{\n          padding: '5px 10px',\n          marginTop: '10px',\n          border: '1px solid #AA46BE30',\n        }}\n      >\n        <span style={{ color: '#FF804255', fontSize: '30px' }}>⚠</span>\n        <span style={{ padding: '10px 12px', fontSize: '18px' }}>\n          Missing Description\n        </span>\n        <div style={{ display: 'block' }}>\n          {nodesWithoutDescription?.map(entry => (\n            <div\n              className=\"jss316 badge\"\n              style={{\n                margin: '5px 10px',\n                fontSize: '14px',\n                padding: '10px',\n                color: COLOR_MAPPING[entry.name.toLowerCase()],\n                backgroundColor: COLOR_MAPPING[entry.name.toLowerCase()] + '10',\n              }}\n              key={entry.name}\n            >\n              <strong>{Math.round(entry.value * 100)}%</strong>{' '}\n              <span>{entry.name.toLowerCase()}s</span>\n            </div>\n          ))}\n        </div>\n      </div>\n      <div\n        className=\"horiz-box\"\n        style={{\n          padding: '5px 10px',\n          marginTop: '10px',\n          border: '1px solid #AA46BE30',\n        }}\n      >\n        <div\n          style={{ width: '100%', display: 'inline-flex', marginTop: '-10px' }}\n        >\n          <span style={{ color: '#FF804255', fontSize: '40px' }}>∅</span>\n          <span\n            style={{\n              padding: '10px 12px',\n              fontSize: '18px',\n              marginTop: '10px',\n            }}\n          >\n            Orphaned Dimensions\n          </span>\n        </div>\n        <div style={{ display: 'block' }}>\n          <div\n            className=\"jss316 badge\"\n            style={{\n              margin: '5px 10px',\n              fontSize: '14px',\n              padding: '10px',\n              color: COLOR_MAPPING.dimension,\n              backgroundColor: COLOR_MAPPING.dimension + '10',\n            }}\n          >\n            <strong>\n              {dimensionNodes?.filter(\n                dim => dim.indegree === 0 || dim.cube_count === 0,\n              ).length || '...'}\n            </strong>\n            <span> dimension nodes</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\nimport {\n  Legend,\n  Tooltip,\n  ResponsiveContainer,\n  BarChart,\n  CartesianGrid,\n  XAxis,\n  YAxis,\n  Bar,\n} from 'recharts';\n\nconst COLOR_MAPPING = {\n  source: '#00C49F',\n  dimension: '#FFBB28',\n  transform: '#0088FE',\n  metric: '#FF91A3',\n  cube: '#AA46BE',\n};\n\nexport const TrendsPanel = () => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [nodeTrends, setNodeTrends] = useState([]);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      setNodeTrends(await djClient.system.node_trends());\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  return (\n    <div className=\"chart-box\" style={{ maxWidth: '60%', flex: '1 1 20%' }}>\n      <div className=\"chart-title\">Trends</div>\n      <ResponsiveContainer width=\"100%\" height={400}>\n        <BarChart\n          width={1000}\n          height={400}\n          data={nodeTrends}\n          margin={{\n            top: 20,\n            right: 30,\n            left: 20,\n            bottom: 5,\n          }}\n        >\n          <CartesianGrid strokeDasharray=\"3 3\" />\n          <XAxis dataKey=\"date\" />\n          <YAxis />\n          <Tooltip />\n          <Legend />\n          {Object.entries(COLOR_MAPPING).map(([key, color]) => (\n            <Bar\n              key={key}\n              dataKey={key}\n              stackId=\"nodeCount\"\n              fill={color}\n              name={key.charAt(0).toUpperCase() + key.slice(1)}\n            />\n          ))}\n        </BarChart>\n      </ResponsiveContainer>\n    </div>\n  );\n};\n","import { useContext, useEffect, useState } from 'react';\nimport DJClientContext from '../../providers/djclient';\n\nexport const DimensionNodeUsagePanel = () => {\n  const djClient = useContext(DJClientContext).DataJunctionAPI;\n  const [dimensionNodes, setDimensionNodes] = useState(null);\n\n  useEffect(() => {\n    const fetchData = async () => {\n      setDimensionNodes(await djClient.system.dimensions());\n    };\n    fetchData().catch(console.error);\n  }, [djClient]);\n\n  return (\n    <>\n      <div className=\"chart-box\">\n        <div className=\"chart-title\">Dimension Node Usage</div>\n        <table className=\"card-inner-table table\" style={{ marginTop: '0' }}>\n          <thead className=\"fs-7 fw-bold text-gray-400 border-bottom-0\">\n            <tr>\n              <th className=\"text-start\">Dimension</th>\n              <th className=\"a\">Links</th>\n              <th className=\"a\">Cubes</th>\n            </tr>\n          </thead>\n          <tbody>\n            {dimensionNodes\n              ?.sort(\n                (a, b) =>\n                  b.cube_count + b.indegree - (a.cube_count + a.indegree),\n              )\n              .slice(0, 6)\n              .map((dim, index) => (\n                <tr key={index}>\n                  <td className=\"a\">\n                    <a href={`/nodes/${dim.name}`}>{dim.name}</a>\n                  </td>\n                  <td className=\"a\">{dim.indegree}</td>\n                  <td className=\"a\">{dim.cube_count}</td>\n                </tr>\n              ))}\n          </tbody>\n        </table>\n      </div>\n    </>\n  );\n};\n","import { OverviewPanel } from './OverviewPanel';\nimport { NodesByTypePanel } from './NodesByTypePanel';\nimport { GovernanceWarningsPanel } from './GovernanceWarningsPanel';\nimport { TrendsPanel } from './TrendsPanel';\nimport { DimensionNodeUsagePanel } from './DimensionNodeUsagePanel';\n\nexport function OverviewPage() {\n  return (\n    <div className=\"mid\">\n      <div\n        style={{\n          display: 'flex',\n          justifyContent: 'flex-end',\n          padding: '0.5rem 1rem',\n        }}\n      >\n        <a href=\"/overview/explore\" className=\"button-3 neutral-button\">\n          Explore system metrics →\n        </a>\n      </div>\n      <div className=\"chart-container\">\n        <OverviewPanel />\n        <NodesByTypePanel />\n        <GovernanceWarningsPanel />\n      </div>\n\n      <div className=\"chart-container\">\n        <TrendsPanel />\n        <DimensionNodeUsagePanel />\n      </div>\n    </div>\n  );\n}\n"],"names":["NodeIcon","width","height","color","style","jsxs","jsx","COLOR_MAPPING","OverviewPanel","djClient","useContext","DJClientContext","nodesByActive","setNodesByActive","useState","nodesByStatus","setNodesByStatus","useEffect","entry","ValidIcon","InvalidIcon","NodesByTypePanel","nodesByType","setNodesByType","materializationsByType","setMaterializationsByType","Fragment","GovernanceWarningsPanel","nodesWithoutDescription","setNodesWithoutDescription","dimensionNodes","setDimensionNodes","dim","TrendsPanel","nodeTrends","setNodeTrends","ResponsiveContainer","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","key","Bar","DimensionNodeUsagePanel","a","b","index","OverviewPage"],"mappings":"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"}