feat: show resource utilization in DevTools plugin

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2023-06-16 10:31:42 +03:00
parent 3fa7468371
commit 12e644aa4e
5 changed files with 38 additions and 7 deletions
+7
View File
@@ -0,0 +1,7 @@
---
'@backstage/plugin-devtools-backend': patch
'@backstage/plugin-devtools-common': patch
'@backstage/plugin-devtools': patch
---
Show resource utilization in `DevTools` plugin
@@ -17,12 +17,12 @@
import { Config, ConfigReader } from '@backstage/config';
import { loadConfigSchema } from '@backstage/config-loader';
import {
PackageDependency,
DevToolsInfo,
ExternalDependency,
Endpoint,
ExternalDependencyStatus,
ConfigInfo,
DevToolsInfo,
Endpoint,
ExternalDependency,
ExternalDependencyStatus,
PackageDependency,
} from '@backstage/plugin-devtools-common';
import { JsonObject } from '@backstage/types';
@@ -204,7 +204,16 @@ export class DevToolsBackendApi {
}
public async listInfo(): Promise<DevToolsInfo> {
const operatingSystem = `${os.type} ${os.release} - ${os.platform}/${os.arch}`;
const operatingSystem = `${os.hostname()}: ${os.type} ${os.release} - ${
os.platform
}/${os.arch}`;
const usedMem = Math.floor((os.totalmem() - os.freemem()) / (1024 * 1024));
const resources = `Memory: ${usedMem}/${Math.floor(
os.totalmem() / (1024 * 1024),
)}MB - Load: ${os
.loadavg()
.map(v => v.toFixed(2))
.join('/')}`;
const nodeJsVersion = process.version;
/* eslint-disable-next-line no-restricted-syntax */
@@ -233,6 +242,7 @@ export class DevToolsBackendApi {
const info: DevToolsInfo = {
operatingSystem: operatingSystem ?? 'N/A',
resourceUtilization: resources ?? 'N/A',
nodeJsVersion: nodeJsVersion ?? 'N/A',
backstageVersion:
backstageJson && backstageJson.version ? backstageJson.version : 'N/A',
+1
View File
@@ -32,6 +32,7 @@ export const devToolsExternalDependenciesReadPermission: BasicPermission;
// @public (undocumented)
export type DevToolsInfo = {
operatingSystem: string;
resourceUtilization: string;
nodeJsVersion: string;
backstageVersion: string;
dependencies: PackageDependency[];
+1
View File
@@ -35,6 +35,7 @@ export type ExternalDependency = {
/** @public */
export type DevToolsInfo = {
operatingSystem: string;
resourceUtilization: string;
nodeJsVersion: string;
backstageVersion: string;
dependencies: PackageDependency[];
@@ -33,6 +33,7 @@ import React from 'react';
import { useInfo } from '../../../hooks';
import { InfoDependenciesTable } from './InfoDependenciesTable';
import DescriptionIcon from '@material-ui/icons/Description';
import MemoryIcon from '@material-ui/icons/Memory';
import DeveloperBoardIcon from '@material-ui/icons/DeveloperBoard';
import { BackstageLogoIcon } from './BackstageLogoIcon';
import FileCopyIcon from '@material-ui/icons/FileCopy';
@@ -57,7 +58,7 @@ const useStyles = makeStyles((theme: Theme) =>
const copyToClipboard = ({ about }: { about: DevToolsInfo | undefined }) => {
if (about) {
let formatted = `OS: ${about.operatingSystem}\nnode: ${about.nodeJsVersion}\nbackstage: ${about.backstageVersion}\nDependencies:\n`;
let formatted = `OS: ${about.operatingSystem}\nResources: ${about.resourceUtilization}\nnode: ${about.nodeJsVersion}\nbackstage: ${about.backstageVersion}\nDependencies:\n`;
const deps = about.dependencies;
for (const key in deps) {
if (Object.prototype.hasOwnProperty.call(deps, key)) {
@@ -93,6 +94,17 @@ export const InfoContent = () => {
secondary={about?.operatingSystem}
/>
</ListItem>
<ListItem>
<ListItemAvatar>
<Avatar>
<MemoryIcon />
</Avatar>
</ListItemAvatar>
<ListItemText
primary="Resource utilization"
secondary={about?.resourceUtilization}
/>
</ListItem>
<ListItem>
<ListItemAvatar>
<Avatar>