+
+ | Drives Online |
+
+ {tenant?.status?.drives_online
+ ? tenant?.status?.drives_online
+ : 0}
+ |
+
+
+ | Drives Offline |
+
+ {tenant?.status?.drives_offline
+ ? tenant?.status?.drives_offline
+ : 0}
+ |
+
+
+ | Write Quorum |
+
+ {tenant?.status?.write_quorum
+ ? tenant?.status?.write_quorum
+ : 0}
+ |
+
+
diff --git a/portal-ui/src/theme/newtheme.ts b/portal-ui/src/theme/newtheme.ts
index 7f329a46d..fdd8ff85a 100644
--- a/portal-ui/src/theme/newtheme.ts
+++ b/portal-ui/src/theme/newtheme.ts
@@ -14,11 +14,6 @@ const newTheme = createMuiTheme({
dark: "#01262E",
contrastText: "#000",
},
- error: {
- light: "#e03a48",
- main: "#dc1f2e",
- contrastText: "#ffffff",
- },
grey: {
100: "#F7F7F7",
200: "#D8DDDE",
@@ -33,6 +28,17 @@ const newTheme = createMuiTheme({
background: {
default: "#F4F4F4",
},
+ success: {
+ main: "#32c787",
+ },
+ warning: {
+ main: "#ffb300",
+ },
+ error: {
+ light: "#e03a48",
+ main: "#dc1f2e",
+ contrastText: "#ffffff",
+ },
},
typography: {
fontFamily: ["Lato", "sans-serif"].join(","),
diff --git a/restapi/admin_tenants.go b/restapi/admin_tenants.go
index 289503bfc..b32018480 100644
--- a/restapi/admin_tenants.go
+++ b/restapi/admin_tenants.go
@@ -434,6 +434,15 @@ func getTenantInfoResponse(session *models.Principal, params admin_api.TenantInf
}
}
+ // attach status information
+ info.Status = &models.TenantStatus{
+ HealthStatus: string(minTenant.Status.HealthStatus),
+ DrivesHealing: minTenant.Status.DrivesHealing,
+ DrivesOffline: minTenant.Status.DrivesOffline,
+ DrivesOnline: minTenant.Status.DrivesOnline,
+ WriteQuorum: minTenant.Status.WriteQuorum,
+ }
+
// get tenant service
minTenant.EnsureDefaults()
//minio service
@@ -533,6 +542,7 @@ func listTenants(ctx context.Context, operatorClient OperatorClientI, namespace
CurrentState: tenant.Status.CurrentState,
Namespace: tenant.ObjectMeta.Namespace,
TotalSize: totalSize,
+ HealthStatus: string(tenant.Status.HealthStatus),
})
}
diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go
index edd6af714..f2fb068a3 100644
--- a/restapi/embedded_spec.go
+++ b/restapi/embedded_spec.go
@@ -6699,6 +6699,9 @@ func init() {
"$ref": "#/definitions/pool"
}
},
+ "status": {
+ "$ref": "#/definitions/tenantStatus"
+ },
"subnet_license": {
"$ref": "#/definitions/license"
},
@@ -6720,6 +6723,9 @@ func init() {
"deletion_date": {
"type": "string"
},
+ "health_status": {
+ "type": "string"
+ },
"instance_count": {
"type": "integer"
},
@@ -6777,6 +6783,30 @@ func init() {
}
}
},
+ "tenantStatus": {
+ "type": "object",
+ "properties": {
+ "drives_healing": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "drives_offline": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "drives_online": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "health_status": {
+ "type": "string"
+ },
+ "write_quorum": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
"tenantUsage": {
"type": "object",
"properties": {
@@ -14398,6 +14428,9 @@ func init() {
"$ref": "#/definitions/pool"
}
},
+ "status": {
+ "$ref": "#/definitions/tenantStatus"
+ },
"subnet_license": {
"$ref": "#/definitions/license"
},
@@ -14419,6 +14452,9 @@ func init() {
"deletion_date": {
"type": "string"
},
+ "health_status": {
+ "type": "string"
+ },
"instance_count": {
"type": "integer"
},
@@ -14476,6 +14512,30 @@ func init() {
}
}
},
+ "tenantStatus": {
+ "type": "object",
+ "properties": {
+ "drives_healing": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "drives_offline": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "drives_online": {
+ "type": "integer",
+ "format": "int32"
+ },
+ "health_status": {
+ "type": "string"
+ },
+ "write_quorum": {
+ "type": "integer",
+ "format": "int32"
+ }
+ }
+ },
"tenantUsage": {
"type": "object",
"properties": {
diff --git a/swagger.yml b/swagger.yml
index 8eca7de02..cff446988 100644
--- a/swagger.yml
+++ b/swagger.yml
@@ -3659,6 +3659,23 @@ definitions:
object_locking_enabled:
type: boolean
+ tenantStatus:
+ type: object
+ properties:
+ write_quorum:
+ type: integer
+ format: int32
+ drives_online:
+ type: integer
+ format: int32
+ drives_offline:
+ type: integer
+ format: int32
+ drives_healing:
+ type: integer
+ format: int32
+ health_status:
+ type: string
tenant:
type: object
@@ -3705,6 +3722,8 @@ definitions:
type: boolean
encryptionEnabled:
type: boolean
+ status:
+ $ref: "#/definitions/tenantStatus"
tenantUsage:
@@ -3738,6 +3757,8 @@ definitions:
type: string
namespace:
type: string
+ health_status:
+ type: string
logSearchResponse:
type: object