Răsfoiți Sursa

Merge branch 'develop' into fix/tweak_oci_url

Matt Ray 2 ani în urmă
părinte
comite
8d2e6f2052

+ 2 - 2
core/pkg/filter/allocation/parser.go

@@ -8,8 +8,8 @@ var allocationFilterFields []*ast.Field = []*ast.Field{
 	ast.NewField(FieldClusterID),
 	ast.NewField(FieldNode),
 	ast.NewField(FieldNamespace),
-	ast.NewField(FieldControllerName),
-	ast.NewField(FieldControllerKind),
+	ast.NewField(FieldControllerName, ast.FieldAttributeNilable),
+	ast.NewField(FieldControllerKind, ast.FieldAttributeNilable),
 	ast.NewField(FieldContainer),
 	ast.NewField(FieldPod),
 	ast.NewField(FieldProvider),

+ 8 - 1
ui/docker-entrypoint.sh

@@ -11,9 +11,16 @@ else
     sed -i "s^{PLACEHOLDER_BASE_URL}^$BASE_URL^g" /var/www/*.js
 fi
 
+# export your OPENCOST_FOOTER_CONTENT='<a href="https://opencost.io">OpenCost</a>' in your Dockerfile to set
+if [[ ! -z "$OPENCOST_FOOTER_CONTENT" ]]; then
+    sed -i "s^PLACEHOLDER_FOOTER_CONTENT^$OPENCOST_FOOTER_CONTENT^g" /var/www/*.js
+else
+    sed -i "s^PLACEHOLDER_FOOTER_CONTENT^OpenCost version: $VERSION ($HEAD)^g" /var/www/*.js
+fi
+
 envsubst '$API_PORT $API_SERVER $UI_PORT' < /etc/nginx/conf.d/default.nginx.conf.template > /etc/nginx/conf.d/default.nginx.conf
 
-echo "Starting ui version $VERSION ($HEAD)"
+echo "Starting OpenCost UI version $VERSION ($HEAD)"
 
 # Run the parent (nginx) container's entrypoint script
 exec /docker-entrypoint.sh "$@"

+ 98 - 11
ui/package-lock.json

@@ -10,21 +10,22 @@
       "hasInstallScript": true,
       "license": "Apache-2.0",
       "dependencies": {
-        "@babel/runtime": "^7.23.9",
-        "@date-io/core": "^1.3.13",
-        "@date-io/date-fns": "^1.3.13",
-        "@material-ui/core": "^4.11.3",
+        "material-design-icons-iconfont": "^6.1.0",
+        "axios": "^1.6.0",
         "@material-ui/icons": "^4.11.2",
         "@material-ui/pickers": "^3.3.10",
-        "@material-ui/styles": "^4.11.5",
-        "axios": "^1.6.0",
+        "html-to-react": "^1.7.0",
+        "@babel/runtime": "^7.23.9",
         "date-fns": "^2.30.0",
-        "material-design-icons-iconfont": "^6.1.0",
-        "prop-types": "^15.7.2",
-        "react": "^17.0.1",
         "react-dom": "^17.0.1",
+        "@material-ui/core": "^4.11.3",
+        "recharts": "^2.2.0",
         "react-router-dom": "^5.2.0",
-        "recharts": "^2.2.0"
+        "@date-io/core": "^1.3.13",
+        "@material-ui/styles": "^4.11.5",
+        "react": "^17.0.1",
+        "@date-io/date-fns": "^1.3.13",
+        "prop-types": "^15.7.2"
       },
       "devDependencies": {
         "@babel/core": "^7.13.10",
@@ -1032,6 +1033,19 @@
         "node": ">=10"
       }
     },
+    "node_modules/html-to-react/node_modules/dom-serializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+      "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.2",
+        "entities": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
     "node_modules/@parcel/reporter-cli": {
       "version": "2.11.0",
       "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.11.0.tgz",
@@ -1109,6 +1123,20 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/html-to-react/node_modules/domhandler": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+      "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+      "dependencies": {
+        "domelementtype": "^2.3.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
     "node_modules/@parcel/workers": {
       "version": "2.11.0",
       "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.11.0.tgz",
@@ -2103,6 +2131,11 @@
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
       "dev": true
     },
+    "node_modules/lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
+    },
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -3948,6 +3981,19 @@
         "react": ">=15"
       }
     },
+    "node_modules/html-to-react/node_modules/domutils": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+      "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
+      "dependencies": {
+        "dom-serializer": "^2.0.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
     "node_modules/@babel/helper-hoist-variables": {
       "version": "7.22.5",
       "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
@@ -4545,6 +4591,19 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/html-to-react": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.7.0.tgz",
+      "integrity": "sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ==",
+      "dependencies": {
+        "domhandler": "^5.0",
+        "htmlparser2": "^9.0",
+        "lodash.camelcase": "^4.3.0"
+      },
+      "peerDependencies": {
+        "react": "^0.13.0 || ^0.14.0 || >=15"
+      }
+    },
     "node_modules/@swc/core-darwin-x64": {
       "version": "1.3.107",
       "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz",
@@ -4714,7 +4773,6 @@
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
       "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -5546,6 +5604,24 @@
         "url": "https://opencollective.com/parcel"
       }
     },
+    "node_modules/html-to-react/node_modules/htmlparser2": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
+      "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.1.0",
+        "entities": "^4.5.0"
+      }
+    },
     "node_modules/@parcel/transformer-svg": {
       "version": "2.11.0",
       "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.11.0.tgz",
@@ -5783,6 +5859,17 @@
         "node": ">=10"
       }
     },
+    "node_modules/html-to-react/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/@parcel/optimizer-svgo/node_modules/css-select": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",

+ 1 - 0
ui/package.json

@@ -23,6 +23,7 @@
     "@material-ui/styles": "^4.11.5",
     "axios": "^1.6.0",
     "date-fns": "^2.30.0",
+    "html-to-react": "^1.7.0",
     "material-design-icons-iconfont": "^6.1.0",
     "prop-types": "^15.7.2",
     "react": "^17.0.1",

+ 2 - 0
ui/src/Reports.js

@@ -22,6 +22,7 @@ import AllocationReport from "./components/allocationReport";
 import Controls from "./components/Controls";
 import Header from "./components/Header";
 import Page from "./components/Page";
+import Footer from "./components/Footer";
 import Subtitle from "./components/Subtitle";
 import Warnings from "./components/Warnings";
 import AllocationService from "./services/allocation";
@@ -302,6 +303,7 @@ const ReportsPage = () => {
           )}
         </Paper>
       )}
+      <Footer/>
     </Page>
   );
 };

+ 2 - 0
ui/src/cloudCostReports.js

@@ -1,6 +1,7 @@
 import * as React from "react";
 import Page from "./components/Page";
 import Header from "./components/Header";
+import Footer from "./components/Footer";
 import IconButton from "@material-ui/core/IconButton";
 import RefreshIcon from "@material-ui/icons/Refresh";
 import { makeStyles } from "@material-ui/styles";
@@ -328,6 +329,7 @@ const CloudCostReports = () => {
           )}
         </Paper>
       )}
+      <Footer/>
     </Page>
   );
 };

+ 13 - 0
ui/src/components/Footer.js

@@ -0,0 +1,13 @@
+import {Parser as HtmlToReactParser} from 'html-to-react'
+
+// Footer could be HTML, so we need to parse it.
+const Footer = () => {
+  const content = '<div align="right"><br/>PLACEHOLDER_FOOTER_CONTENT</div>';
+  const htmlToReactParser = new HtmlToReactParser();
+  const parsedContent = htmlToReactParser.parse(content);
+  return (
+    parsedContent
+    )
+  }
+
+export default Footer;