mirror of
https://github.com/OpenMaxIO/openmaxio-object-browser
synced 2026-07-01 07:41:18 -07:00
Basic dashboard drives (#998)
* Added Disk properties to admin_info * Added Disk properties to admin_info * Created DriveInfo cards * Fixed drive card formatting * Added Disk properties to admin_info Created DriveInfo cards Added Disk properties to admin_info Fixed drive card formatting Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
This commit is contained in:
@@ -34,9 +34,33 @@ import (
|
||||
// swagger:model serverDrives
|
||||
type ServerDrives struct {
|
||||
|
||||
// available space
|
||||
AvailableSpace int64 `json:"availableSpace,omitempty"`
|
||||
|
||||
// drive path
|
||||
DrivePath string `json:"drivePath,omitempty"`
|
||||
|
||||
// endpoint
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
|
||||
// healing
|
||||
Healing bool `json:"healing,omitempty"`
|
||||
|
||||
// model
|
||||
Model string `json:"model,omitempty"`
|
||||
|
||||
// root disk
|
||||
RootDisk bool `json:"rootDisk,omitempty"`
|
||||
|
||||
// state
|
||||
State string `json:"state,omitempty"`
|
||||
|
||||
// total space
|
||||
TotalSpace int64 `json:"totalSpace,omitempty"`
|
||||
|
||||
// used space
|
||||
UsedSpace int64 `json:"usedSpace,omitempty"`
|
||||
|
||||
// uuid
|
||||
UUID string `json:"uuid,omitempty"`
|
||||
}
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "./static/css/main.8cfac526.chunk.css",
|
||||
"main.js": "./static/js/main.db2f3b23.chunk.js",
|
||||
"main.js.map": "./static/js/main.db2f3b23.chunk.js.map",
|
||||
"main.js": "./static/js/main.4cd0e515.chunk.js",
|
||||
"main.js.map": "./static/js/main.4cd0e515.chunk.js.map",
|
||||
"runtime-main.js": "./static/js/runtime-main.3fe0c1ac.js",
|
||||
"runtime-main.js.map": "./static/js/runtime-main.3fe0c1ac.js.map",
|
||||
"static/css/2.20c81d8d.chunk.css": "./static/css/2.20c81d8d.chunk.css",
|
||||
"static/js/2.015f2e34.chunk.js": "./static/js/2.015f2e34.chunk.js",
|
||||
"static/js/2.015f2e34.chunk.js.map": "./static/js/2.015f2e34.chunk.js.map",
|
||||
"static/css/2.60e04a19.chunk.css": "./static/css/2.60e04a19.chunk.css",
|
||||
"static/js/2.acaecd2d.chunk.js": "./static/js/2.acaecd2d.chunk.js",
|
||||
"static/js/2.acaecd2d.chunk.js.map": "./static/js/2.acaecd2d.chunk.js.map",
|
||||
"index.html": "./index.html",
|
||||
"static/css/2.20c81d8d.chunk.css.map": "./static/css/2.20c81d8d.chunk.css.map",
|
||||
"static/css/main.8cfac526.chunk.css.map": "./static/css/main.8cfac526.chunk.css.map",
|
||||
"static/js/2.015f2e34.chunk.js.LICENSE.txt": "./static/js/2.015f2e34.chunk.js.LICENSE.txt"
|
||||
"static/js/2.acaecd2d.chunk.js.LICENSE.txt": "./static/js/2.acaecd2d.chunk.js.LICENSE.txt"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/js/runtime-main.3fe0c1ac.js",
|
||||
"static/css/2.20c81d8d.chunk.css",
|
||||
"static/js/2.015f2e34.chunk.js",
|
||||
"static/css/2.60e04a19.chunk.css",
|
||||
"static/js/2.acaecd2d.chunk.js",
|
||||
"static/css/main.8cfac526.chunk.css",
|
||||
"static/js/main.db2f3b23.chunk.js"
|
||||
"static/js/main.4cd0e515.chunk.js"
|
||||
]
|
||||
}
|
||||
@@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="MinIO Console"/><link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;500;700;900&display=swap" rel="stylesheet"/><link href="./styles/root-styles.css" rel="stylesheet"/><link rel="apple-touch-icon" sizes="180x180" href="./apple-icon-180x180.png"/><link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png"/><link rel="icon" type="image/png" sizes="96x96" href="./favicon-96x96.png"/><link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png"/><link rel="manifest" href="./manifest.json"/><link rel="mask-icon" href="./safari-pinned-tab.svg" color="#3a4e54"/><title>MinIO Console</title><link href="./static/css/2.20c81d8d.chunk.css" rel="stylesheet"><link href="./static/css/main.8cfac526.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="loader-block"><svg class="loader-svg-container" viewBox="22 22 44 44"><circle class="loader-style MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></div></div><script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="./";var i=this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="./static/js/2.015f2e34.chunk.js"></script><script src="./static/js/main.db2f3b23.chunk.js"></script></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="MinIO Console"/><link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;500;700;900&display=swap" rel="stylesheet"/><link href="./styles/root-styles.css" rel="stylesheet"/><link rel="apple-touch-icon" sizes="180x180" href="./apple-icon-180x180.png"/><link rel="icon" type="image/png" sizes="32x32" href="./favicon-32x32.png"/><link rel="icon" type="image/png" sizes="96x96" href="./favicon-96x96.png"/><link rel="icon" type="image/png" sizes="16x16" href="./favicon-16x16.png"/><link rel="manifest" href="./manifest.json"/><link rel="mask-icon" href="./safari-pinned-tab.svg" color="#3a4e54"/><title>MinIO Console</title><link href="./static/css/2.60e04a19.chunk.css" rel="stylesheet"><link href="./static/css/main.8cfac526.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="loader-block"><svg class="loader-svg-container" viewBox="22 22 44 44"><circle class="loader-style MuiCircularProgress-circle MuiCircularProgress-circleIndeterminate" cx="44" cy="44" r="20.2" fill="none" stroke-width="3.6"></circle></svg></div></div><script>!function(e){function r(r){for(var n,l,i=r[0],a=r[1],p=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n]);for(f&&f(r);s.length;)s.shift()();return u.push.apply(u,p||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var a=t[i];0!==o[a]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={1:0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="./";var i=this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[],a=i.push.bind(i);i.push=r,i=i.slice();for(var p=0;p<i.length;p++)r(i[p]);var f=a;t()}([])</script><script src="./static/js/2.acaecd2d.chunk.js"></script><script src="./static/js/main.4cd0e515.chunk.js"></script></body></html>
|
||||
3
portal-ui/build/static/js/2.acaecd2d.chunk.js
Normal file
3
portal-ui/build/static/js/2.acaecd2d.chunk.js
Normal file
File diff suppressed because one or more lines are too long
280
portal-ui/build/static/js/2.acaecd2d.chunk.js.LICENSE.txt
Normal file
280
portal-ui/build/static/js/2.acaecd2d.chunk.js.LICENSE.txt
Normal file
@@ -0,0 +1,280 @@
|
||||
/*
|
||||
object-assign
|
||||
(c) Sindre Sorhus
|
||||
@license MIT
|
||||
*/
|
||||
|
||||
/*!
|
||||
Copyright (c) 2018 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
||||
|
||||
/*!
|
||||
* Chart.js v2.9.4
|
||||
* https://www.chartjs.org
|
||||
* (c) 2020 Chart.js Contributors
|
||||
* Released under the MIT License
|
||||
*/
|
||||
|
||||
/*!
|
||||
* cookie
|
||||
* Copyright(c) 2012-2014 Roman Shtylman
|
||||
* Copyright(c) 2015 Douglas Christopher Wilson
|
||||
* MIT Licensed
|
||||
*/
|
||||
|
||||
/*! Conditions:: INITIAL */
|
||||
|
||||
/*! Moment Duration Format v2.2.2
|
||||
* https://github.com/jsmreese/moment-duration-format
|
||||
* Date: 2018-02-16
|
||||
*
|
||||
* Duration format plugin function for the Moment.js library
|
||||
* http://momentjs.com/
|
||||
*
|
||||
* Copyright 2018 John Madhavan-Reese
|
||||
* Released under the MIT license
|
||||
*/
|
||||
|
||||
/*! Production:: $accept : expression $end */
|
||||
|
||||
/*! Production:: css_value : ANGLE */
|
||||
|
||||
/*! Production:: css_value : CHS */
|
||||
|
||||
/*! Production:: css_value : EMS */
|
||||
|
||||
/*! Production:: css_value : EXS */
|
||||
|
||||
/*! Production:: css_value : FREQ */
|
||||
|
||||
/*! Production:: css_value : LENGTH */
|
||||
|
||||
/*! Production:: css_value : PERCENTAGE */
|
||||
|
||||
/*! Production:: css_value : REMS */
|
||||
|
||||
/*! Production:: css_value : RES */
|
||||
|
||||
/*! Production:: css_value : SUB css_value */
|
||||
|
||||
/*! Production:: css_value : TIME */
|
||||
|
||||
/*! Production:: css_value : VHS */
|
||||
|
||||
/*! Production:: css_value : VMAXS */
|
||||
|
||||
/*! Production:: css_value : VMINS */
|
||||
|
||||
/*! Production:: css_value : VWS */
|
||||
|
||||
/*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP COMMA math_expression RPAREN */
|
||||
|
||||
/*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP RPAREN */
|
||||
|
||||
/*! Production:: expression : math_expression EOF */
|
||||
|
||||
/*! Production:: math_expression : LPAREN math_expression RPAREN */
|
||||
|
||||
/*! Production:: math_expression : NESTED_CALC LPAREN math_expression RPAREN */
|
||||
|
||||
/*! Production:: math_expression : SUB PREFIX SUB NESTED_CALC LPAREN math_expression RPAREN */
|
||||
|
||||
/*! Production:: math_expression : css_value */
|
||||
|
||||
/*! Production:: math_expression : css_variable */
|
||||
|
||||
/*! Production:: math_expression : math_expression ADD math_expression */
|
||||
|
||||
/*! Production:: math_expression : math_expression DIV math_expression */
|
||||
|
||||
/*! Production:: math_expression : math_expression MUL math_expression */
|
||||
|
||||
/*! Production:: math_expression : math_expression SUB math_expression */
|
||||
|
||||
/*! Production:: math_expression : value */
|
||||
|
||||
/*! Production:: value : NUMBER */
|
||||
|
||||
/*! Production:: value : SUB NUMBER */
|
||||
|
||||
/*! Rule:: $ */
|
||||
|
||||
/*! Rule:: (--[0-9a-z-A-Z-]*) */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)% */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)Hz\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ch\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)cm\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)deg\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpcm\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpi\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dppx\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)em\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ex\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)grad\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)in\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)kHz\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)mm\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ms\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pc\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pt\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)px\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rad\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rem\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)s\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)turn\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vh\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmax\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmin\b */
|
||||
|
||||
/*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vw\b */
|
||||
|
||||
/*! Rule:: ([a-z]+) */
|
||||
|
||||
/*! Rule:: (calc) */
|
||||
|
||||
/*! Rule:: (var) */
|
||||
|
||||
/*! Rule:: , */
|
||||
|
||||
/*! Rule:: - */
|
||||
|
||||
/*! Rule:: \( */
|
||||
|
||||
/*! Rule:: \) */
|
||||
|
||||
/*! Rule:: \* */
|
||||
|
||||
/*! Rule:: \+ */
|
||||
|
||||
/*! Rule:: \/ */
|
||||
|
||||
/*! Rule:: \s+ */
|
||||
|
||||
/*! decimal.js-light v2.5.1 https://github.com/MikeMcl/decimal.js-light/LICENCE */
|
||||
|
||||
/**
|
||||
* A better abstraction over CSS.
|
||||
*
|
||||
* @copyright Oleg Isonen (Slobodskoi) / Isonen 2014-present
|
||||
* @website https://github.com/cssinjs/jss
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
/** @license React v0.20.2
|
||||
* scheduler.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v16.10.2
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v16.13.1
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.1
|
||||
* react-dom.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-jsx-runtime.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**!
|
||||
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
||||
* @version 1.16.1-lts
|
||||
* @license
|
||||
* Copyright (c) 2016 Federico Zivolo and contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
//! moment.js
|
||||
1
portal-ui/build/static/js/2.acaecd2d.chunk.js.map
Normal file
1
portal-ui/build/static/js/2.acaecd2d.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/main.4cd0e515.chunk.js
Normal file
2
portal-ui/build/static/js/main.4cd0e515.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/main.4cd0e515.chunk.js.map
Normal file
1
portal-ui/build/static/js/main.4cd0e515.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -55,9 +55,12 @@ const styles = (theme: Theme) =>
|
||||
},
|
||||
},
|
||||
serversContainer: {
|
||||
height: 250,
|
||||
height: "auto",
|
||||
overflow: "hidden" as const,
|
||||
},
|
||||
drivesContainer: {
|
||||
overflow: "flex",
|
||||
},
|
||||
infoHeight: {
|
||||
height: 180,
|
||||
minWidth: 247,
|
||||
@@ -140,6 +143,10 @@ const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
|
||||
classes.fixedHeight,
|
||||
classes.serversContainer
|
||||
);
|
||||
const expandedServersPaperContainer = clsx(
|
||||
classes.paper,
|
||||
classes.serversContainer
|
||||
);
|
||||
|
||||
const prettyUsage = (usage: string | undefined) => {
|
||||
if (usage === undefined) {
|
||||
@@ -240,7 +247,7 @@ const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
|
||||
</Paper>
|
||||
</Grid>
|
||||
<Grid item xs={12} className={classes.serversAdj}>
|
||||
<Paper className={serversPaperContainer}>
|
||||
<Paper className={expandedServersPaperContainer}>
|
||||
<div>
|
||||
<Grid container direction="row" alignItems="center">
|
||||
<Grid item className={classes.icon}>
|
||||
@@ -254,20 +261,41 @@ const BasicDashboard = ({ classes, usage }: IDashboardProps) => {
|
||||
</Grid>
|
||||
</Grid>
|
||||
</div>
|
||||
<div className={classes.serversListContainer}>
|
||||
|
||||
<div >
|
||||
<div className={classes.cardsContainer}>
|
||||
{serverArray.map((server, index) => (
|
||||
<ServerInfoCard
|
||||
<ServerInfoCard
|
||||
server={server}
|
||||
key={`serverDS-${index.toString()}`}
|
||||
/>
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<Grid container direction="row" alignItems="center">
|
||||
<Grid item className={classes.icon}>
|
||||
<StorageIcon />
|
||||
</Grid>
|
||||
<Grid item>
|
||||
<Typography className={classes.elementTitle}>
|
||||
{" "}
|
||||
Drives
|
||||
</Typography>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</div>
|
||||
</Paper>
|
||||
</Grid>
|
||||
</Grid>
|
||||
<div className={classes.cardsContainer}>
|
||||
{serverArray.map((server, index) => (
|
||||
server.drives.map((drive) => (
|
||||
<DriveInfoCard drive={drive}/>
|
||||
))) )}
|
||||
</div>
|
||||
</Paper>
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
</Fragment>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
// This file is part of MinIO Console Server
|
||||
// Copyright (c) 2021 MinIO, Inc.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import React from "react";
|
||||
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
|
||||
import ComputerIcon from "@material-ui/icons/Computer";
|
||||
import HealIcon from "../../../../icons/HealIcon";
|
||||
import Grid from "@material-ui/core/Grid";
|
||||
import Paper from "@material-ui/core/Paper";
|
||||
import { IDriveInfo } from "../types";
|
||||
import { niceBytes } from "../../../../common/utils";
|
||||
import { Tooltip } from "@material-ui/core";
|
||||
import HelpIcon from "../../../../icons/HelpIcon";
|
||||
|
||||
const styles = (theme: Theme) =>
|
||||
createStyles({
|
||||
serverCard: {
|
||||
padding: 15,
|
||||
margin: 8,
|
||||
width: "100%",
|
||||
maxWidth: 620,
|
||||
"& .computerIcon": {
|
||||
marginRight: 10,
|
||||
},
|
||||
},
|
||||
titleContainer: {
|
||||
display: "flex",
|
||||
},
|
||||
cardIconContainer: {
|
||||
display: "flex",
|
||||
position: "relative",
|
||||
alignItems: "center",
|
||||
},
|
||||
endpoint: {
|
||||
color: "#000000",
|
||||
fontSize: 20,
|
||||
fontWeight: "bold",
|
||||
position: "relative" as const,
|
||||
textOverflow: "ellipsis",
|
||||
whiteSpace: "nowrap",
|
||||
overflow: "hidden",
|
||||
},
|
||||
stateContainer: {
|
||||
display: "flex",
|
||||
flexWrap: "wrap",
|
||||
justifyContent: "space-between",
|
||||
},
|
||||
infoValue: {
|
||||
fontWeight: 500,
|
||||
color: "#777777",
|
||||
fontSize: 14,
|
||||
margin: "5px 4px",
|
||||
display: "inline-flex",
|
||||
"& strong": {
|
||||
marginRight: 4,
|
||||
},
|
||||
},
|
||||
redState: {
|
||||
color: theme.palette.error.main,
|
||||
},
|
||||
greenState: {
|
||||
color: theme.palette.success.main,
|
||||
},
|
||||
yellowState: {
|
||||
color: theme.palette.warning.main,
|
||||
},
|
||||
greyState: {
|
||||
color: "grey",
|
||||
},
|
||||
healthStatusIcon: {
|
||||
position: "absolute",
|
||||
fontSize: 10,
|
||||
left: 18,
|
||||
height: 10,
|
||||
bottom: 5,
|
||||
},
|
||||
innerState: {
|
||||
fontSize: 10,
|
||||
marginLeft: 5,
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
marginTop: -3,
|
||||
},
|
||||
});
|
||||
|
||||
interface ICardProps {
|
||||
classes: any;
|
||||
drive: IDriveInfo;
|
||||
}
|
||||
|
||||
const DriveInfoCard = ({ classes, drive }: ICardProps) => {
|
||||
console.log(drive);
|
||||
const driveStatusToClass = (health_status: string) => {
|
||||
switch (health_status) {
|
||||
case "offline":
|
||||
return classes.redState;
|
||||
case "ok":
|
||||
return classes.greenState;
|
||||
default:
|
||||
return classes.greyState;
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<Paper className={classes.serverCard}>
|
||||
<Grid container direction="row" alignItems="center">
|
||||
<Grid item xs={12}>
|
||||
<div className={classes.titleContainer}>
|
||||
<div className={classes.cardIconContainer}>
|
||||
<ComputerIcon className="computerIcon" />
|
||||
<div className={classes.healthStatusIcon}>
|
||||
{drive.state && (
|
||||
<span className={driveStatusToClass(drive.state)}>⬤</span>
|
||||
)}
|
||||
</div>
|
||||
</div>{" "}
|
||||
<Tooltip title={drive.endpoint} placement="bottom">
|
||||
<div className={classes.endpoint}>{drive.endpoint}</div>
|
||||
</Tooltip>
|
||||
<span className={classes.infoValue}>
|
||||
{drive.healing && <HealIcon />}
|
||||
{drive.rootDisk && <HelpIcon />}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</Grid>
|
||||
<Grid item xs={12} className={classes.stateContainer}>
|
||||
<span className={classes.infoValue}>
|
||||
<strong>Total Space:</strong> {niceBytes(drive.totalSpace.toString())}
|
||||
</span>
|
||||
<span className={classes.infoValue}>
|
||||
<strong>Used Space:</strong> {niceBytes(drive.usedSpace.toString())}
|
||||
</span>
|
||||
<span className={classes.infoValue}>
|
||||
<strong>Available Space:</strong> {niceBytes(drive.availableSpace.toString())}
|
||||
</span>
|
||||
|
||||
</Grid>
|
||||
</Grid>
|
||||
</Paper>
|
||||
);
|
||||
};
|
||||
|
||||
export default withStyles(styles)(DriveInfoCard);
|
||||
@@ -36,4 +36,13 @@ export interface ServerInfo {
|
||||
export interface IDriveInfo {
|
||||
state: string;
|
||||
uuid: string;
|
||||
endpoint: string;
|
||||
drivePath: string;
|
||||
rootDisk: boolean;
|
||||
healing: boolean;
|
||||
model: string;
|
||||
totalSpace: number;
|
||||
usedSpace: number;
|
||||
availableSpace: number;
|
||||
|
||||
}
|
||||
|
||||
@@ -87,7 +87,18 @@ func GetAdminInfo(ctx context.Context, client MinioAdmin) (*UsageInfo, error) {
|
||||
var drives = []*models.ServerDrives{}
|
||||
|
||||
for _, drive := range serv.Disks {
|
||||
drives = append(drives, &models.ServerDrives{State: drive.State, UUID: drive.UUID})
|
||||
drives = append(drives, &models.ServerDrives{
|
||||
State: drive.State,
|
||||
UUID: drive.UUID,
|
||||
Endpoint: drive.Endpoint,
|
||||
RootDisk: drive.RootDisk,
|
||||
DrivePath: drive.DrivePath,
|
||||
Healing: drive.Healing,
|
||||
Model: drive.Model,
|
||||
TotalSpace: int64(drive.TotalSpace),
|
||||
UsedSpace: int64(drive.UsedSpace),
|
||||
AvailableSpace: int64(drive.AvailableSpace),
|
||||
})
|
||||
}
|
||||
|
||||
var newServer = &models.ServerProperties{
|
||||
|
||||
@@ -4950,9 +4950,33 @@ func init() {
|
||||
"serverDrives": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"availableSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"drivePath": {
|
||||
"type": "string"
|
||||
},
|
||||
"endpoint": {
|
||||
"type": "string"
|
||||
},
|
||||
"healing": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"model": {
|
||||
"type": "string"
|
||||
},
|
||||
"rootDisk": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"state": {
|
||||
"type": "string"
|
||||
},
|
||||
"totalSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"usedSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"uuid": {
|
||||
"type": "string"
|
||||
}
|
||||
@@ -10521,9 +10545,33 @@ func init() {
|
||||
"serverDrives": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"availableSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"drivePath": {
|
||||
"type": "string"
|
||||
},
|
||||
"endpoint": {
|
||||
"type": "string"
|
||||
},
|
||||
"healing": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"model": {
|
||||
"type": "string"
|
||||
},
|
||||
"rootDisk": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"state": {
|
||||
"type": "string"
|
||||
},
|
||||
"totalSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"usedSpace": {
|
||||
"type": "integer"
|
||||
},
|
||||
"uuid": {
|
||||
"type": "string"
|
||||
}
|
||||
|
||||
@@ -3170,6 +3170,22 @@ definitions:
|
||||
type: string
|
||||
state:
|
||||
type: string
|
||||
endpoint:
|
||||
type: string
|
||||
drivePath:
|
||||
type: string
|
||||
rootDisk:
|
||||
type: boolean
|
||||
healing:
|
||||
type: boolean
|
||||
model:
|
||||
type: string
|
||||
totalSpace:
|
||||
type: integer
|
||||
usedSpace:
|
||||
type: integer
|
||||
availableSpace:
|
||||
type: integer
|
||||
arnsResponse:
|
||||
type: object
|
||||
properties:
|
||||
|
||||
Reference in New Issue
Block a user