2022-08-20 21:22:46 +08:00
// Copyright 2022 The Casdoor Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2022-08-21 10:47:36 +08:00
import { Card , Col , Divider , Progress , Row , Spin } from "antd" ;
2022-08-20 21:22:46 +08:00
import * as SystemBackend from "./backend/SystemInfo" ;
import React from "react" ;
import * as Setting from "./Setting" ;
import i18next from "i18next" ;
class SystemInfo extends React . Component {
constructor ( props ) {
super ( props ) ;
this . state = {
2023-03-09 17:11:41 +08:00
systemInfo : { cpuUsage : [ ] , memoryUsed : 0 , memoryTotal : 0 } ,
versionInfo : { } ,
2022-08-20 21:22:46 +08:00
intervalId : null ,
2022-08-21 10:47:36 +08:00
loading : true ,
2022-08-20 21:22:46 +08:00
} ;
}
UNSAFE _componentWillMount ( ) {
2023-03-09 17:11:41 +08:00
SystemBackend . getSystemInfo ( ) . then ( res => {
2022-08-20 21:22:46 +08:00
this . setState ( {
2023-03-09 17:11:41 +08:00
systemInfo : res . data ,
2022-08-21 10:47:36 +08:00
loading : false ,
2022-08-20 21:22:46 +08:00
} ) ;
const id = setInterval ( ( ) => {
2023-03-09 17:11:41 +08:00
SystemBackend . getSystemInfo ( ) . then ( res => {
2022-08-20 21:22:46 +08:00
this . setState ( {
2023-03-09 17:11:41 +08:00
systemInfo : res . data ,
2022-08-20 21:22:46 +08:00
} ) ;
2022-08-21 10:47:36 +08:00
} ) . catch ( error => {
Setting . showMessage ( "error" , ` System info failed to get: ${ error } ` ) ;
2022-08-20 21:22:46 +08:00
} ) ;
} , 1000 * 3 ) ;
this . setState ( { intervalId : id } ) ;
} ) . catch ( error => {
Setting . showMessage ( "error" , ` System info failed to get: ${ error } ` ) ;
} ) ;
2023-03-09 17:11:41 +08:00
SystemBackend . getVersionInfo ( ) . then ( res => {
this . setState ( {
versionInfo : res . data ,
} ) ;
2022-08-20 21:22:46 +08:00
} ) . catch ( err => {
2023-03-09 17:11:41 +08:00
Setting . showMessage ( "error" , ` Version info failed to get: ${ err } ` ) ;
2022-08-20 21:22:46 +08:00
} ) ;
}
componentWillUnmount ( ) {
2022-08-21 10:47:36 +08:00
if ( this . state . intervalId !== null ) {
clearInterval ( this . state . intervalId ) ;
}
2022-08-20 21:22:46 +08:00
}
render ( ) {
2023-03-18 10:16:35 +08:00
const cpuUi = this . state . systemInfo . cpuUsage ? . length <= 0 ? i18next . t ( "system:Failed to get CPU usage" ) :
2023-03-09 17:11:41 +08:00
this . state . systemInfo . cpuUsage . map ( ( usage , i ) => {
2022-08-21 10:47:36 +08:00
return (
< Progress key = { i } percent = { Number ( usage . toFixed ( 1 ) ) } / >
) ;
2023-03-09 17:11:41 +08:00
} ) ;
2022-08-21 10:47:36 +08:00
2023-03-18 10:16:35 +08:00
const memUi = this . state . systemInfo . memoryUsed && this . state . systemInfo . memoryTotal && this . state . systemInfo . memoryTotal <= 0 ? i18next . t ( "system:Failed to get memory usage" ) :
2023-03-09 17:11:41 +08:00
< div >
{ Setting . getFriendlyFileSize ( this . state . systemInfo . memoryUsed ) } / { Setting . getFriendlyFileSize ( this . state . systemInfo . memoryTotal ) }
< br / > < br / >
< Progress type = "circle" percent = { Number ( ( Number ( this . state . systemInfo . memoryUsed ) / Number ( this . state . systemInfo . memoryTotal ) * 100 ) . toFixed ( 2 ) ) } / >
< / d i v > ;
const link = this . state . versionInfo ? . version !== "" ? ` https://github.com/casdoor/casdoor/releases/tag/ ${ this . state . versionInfo ? . version } ` : "" ;
2023-03-18 10:16:35 +08:00
let versionText = this . state . versionInfo ? . version !== "" ? this . state . versionInfo ? . version : i18next . t ( "system:Unknown version" ) ;
2023-03-09 17:11:41 +08:00
if ( this . state . versionInfo ? . commitOffset > 0 ) {
versionText += ` (ahead+ ${ this . state . versionInfo ? . commitOffset } ) ` ;
}
2022-08-21 10:47:36 +08:00
2022-11-05 15:46:52 +01:00
if ( ! Setting . isMobile ( ) ) {
return (
< Row >
< Col span = { 6 } > < / C o l >
< Col span = { 12 } >
< Row gutter = { [ 10 , 10 ] } >
< Col span = { 12 } >
< Card title = { i18next . t ( "system:CPU Usage" ) } bordered = { true } style = { { textAlign : "center" , height : "100%" } } >
2023-03-09 17:11:41 +08:00
{ this . state . loading ? < Spin size = "large" / > : cpuUi }
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< Col span = { 12 } >
< Card title = { i18next . t ( "system:Memory Usage" ) } bordered = { true } style = { { textAlign : "center" , height : "100%" } } >
2023-03-09 17:11:41 +08:00
{ this . state . loading ? < Spin size = "large" / > : memUi }
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< / R o w >
< Divider / >
< Card title = { i18next . t ( "system:About Casdoor" ) } bordered = { true } style = { { textAlign : "center" } } >
< div > { i18next . t ( "system:An Identity and Access Management (IAM) / Single-Sign-On (SSO) platform with web UI supporting OAuth 2.0, OIDC, SAML and CAS" ) } < / d i v >
2023-03-09 17:11:41 +08:00
GitHub : < a target = "_blank" rel = "noreferrer" href = "https://github.com/casdoor/casdoor" > Casdoor < / a >
2022-11-05 15:46:52 +01:00
< br / >
2023-03-09 17:11:41 +08:00
{ i18next . t ( "system:Version" ) } : < a target = "_blank" rel = "noreferrer" href = { link } > { versionText } < / a >
2022-11-05 15:46:52 +01:00
< br / >
2023-03-18 10:16:35 +08:00
{ i18next . t ( "system:Official website" ) } : < a target = "_blank" rel = "noreferrer" href = "https://casdoor.org" > https : //casdoor.org</a>
2022-11-05 15:46:52 +01:00
< br / >
2023-03-09 17:11:41 +08:00
{ i18next . t ( "system:Community" ) } : < a target = "_blank" rel = "noreferrer" href = "https://casdoor.org/#:~:text=Casdoor%20API-,Community,-GitHub" > Get in Touch ! < / a >
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< Col span = { 6 } > < / C o l >
< / R o w >
) ;
} else {
return (
< Row gutter = { [ 16 , 0 ] } >
< Col span = { 24 } >
< Card title = { i18next . t ( "system:CPU Usage" ) } bordered = { true } style = { { textAlign : "center" , width : "100%" } } >
2023-03-09 17:11:41 +08:00
{ this . state . loading ? < Spin size = "large" / > : cpuUi }
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< Col span = { 24 } >
< Card title = { i18next . t ( "system:Memory Usage" ) } bordered = { true } style = { { textAlign : "center" , width : "100%" } } >
2023-03-09 17:11:41 +08:00
{ this . state . loading ? < Spin size = "large" / > : memUi }
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< Col span = { 24 } >
< Card title = { i18next . t ( "system:About Casdoor" ) } bordered = { true } style = { { textAlign : "center" } } >
< div > { i18next . t ( "system:An Identity and Access Management (IAM) / Single-Sign-On (SSO) platform with web UI supporting OAuth 2.0, OIDC, SAML and CAS" ) } < / d i v >
2023-03-09 17:11:41 +08:00
GitHub : < a target = "_blank" rel = "noreferrer" href = "https://github.com/casdoor/casdoor" > Casdoor < / a >
2022-11-05 15:46:52 +01:00
< br / >
2023-03-09 17:11:41 +08:00
{ i18next . t ( "system:Version" ) } : < a target = "_blank" rel = "noreferrer" href = { link } > { versionText } < / a >
2022-11-05 15:46:52 +01:00
< br / >
2023-03-18 10:16:35 +08:00
{ i18next . t ( "system:Official website" ) } : < a target = "_blank" rel = "noreferrer" href = "https://casdoor.org" > https : //casdoor.org</a>
2022-11-05 15:46:52 +01:00
< br / >
2023-03-09 17:11:41 +08:00
{ i18next . t ( "system:Community" ) } : < a target = "_blank" rel = "noreferrer" href = "https://casdoor.org/#:~:text=Casdoor%20API-,Community,-GitHub" > Get in Touch ! < / a >
2022-11-05 15:46:52 +01:00
< / C a r d >
< / C o l >
< / R o w >
) ;
}
2022-08-20 21:22:46 +08:00
}
}
export default SystemInfo ;