mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
remove refactoring
Signed-off-by: Sebastian Malton <smalton@mirantis.com>
This commit is contained in:
parent
2af58cde72
commit
4dad9eec13
@ -274,7 +274,6 @@ msgstr "CA Bundle"
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:53
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU"
|
||||
msgstr "CPU"
|
||||
|
||||
@ -297,7 +296,10 @@ msgstr "CPU limits"
|
||||
msgid "CPU requests"
|
||||
msgstr "CPU requests"
|
||||
|
||||
#: src/renderer/components/+workspaces/workspaces.tsx:119
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU:"
|
||||
msgstr "CPU:"
|
||||
|
||||
#: src/renderer/components/confirm-dialog/confirm-dialog.tsx:44
|
||||
#: src/renderer/components/dock/info-panel.tsx:97
|
||||
#: src/renderer/components/wizard/wizard.tsx:130
|
||||
@ -663,13 +665,12 @@ msgstr "Desired number of replicas"
|
||||
#: src/renderer/components/+nodes/node-details.tsx:65
|
||||
#: src/renderer/components/+nodes/nodes.tsx:115
|
||||
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk"
|
||||
msgstr "Disk"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:171
|
||||
msgid "Does not affect cluster communications!"
|
||||
msgstr "Does not affect cluster communications!"
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk:"
|
||||
msgstr "Disk:"
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
|
||||
msgid "Domains"
|
||||
@ -1145,7 +1146,6 @@ msgstr "Medium"
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:63
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory"
|
||||
msgstr "Memory"
|
||||
|
||||
@ -1167,6 +1167,10 @@ msgstr "Memory requests"
|
||||
msgid "Memory usage"
|
||||
msgstr "Memory usage"
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory:"
|
||||
msgstr "Memory:"
|
||||
|
||||
#: src/renderer/components/+cluster/cluster-issues.tsx:100
|
||||
#: src/renderer/components/+events/event-details.tsx:30
|
||||
#: src/renderer/components/+events/events.tsx:62
|
||||
@ -2389,8 +2393,8 @@ msgid "and <0>{tailCount}</0> more"
|
||||
msgstr "and <0>{tailCount}</0> more"
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "cores"
|
||||
msgstr "cores"
|
||||
msgid "cores:"
|
||||
msgstr "cores:"
|
||||
|
||||
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41
|
||||
msgid "exit code"
|
||||
|
||||
@ -274,7 +274,6 @@ msgstr ""
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:53
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU"
|
||||
msgstr ""
|
||||
|
||||
@ -297,7 +296,10 @@ msgstr ""
|
||||
msgid "CPU requests"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+workspaces/workspaces.tsx:119
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/confirm-dialog/confirm-dialog.tsx:44
|
||||
#: src/renderer/components/dock/info-panel.tsx:97
|
||||
#: src/renderer/components/wizard/wizard.tsx:130
|
||||
@ -659,10 +661,13 @@ msgstr ""
|
||||
#: src/renderer/components/+nodes/node-details.tsx:65
|
||||
#: src/renderer/components/+nodes/nodes.tsx:115
|
||||
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
@ -1132,7 +1137,6 @@ msgstr ""
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:63
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory"
|
||||
msgstr ""
|
||||
|
||||
@ -1154,6 +1158,10 @@ msgstr ""
|
||||
msgid "Memory usage"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+cluster/cluster-issues.tsx:100
|
||||
#: src/renderer/components/+events/event-details.tsx:30
|
||||
#: src/renderer/components/+events/events.tsx:62
|
||||
@ -2368,7 +2376,7 @@ msgid "and <0>{tailCount}</0> more"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "cores"
|
||||
msgid "cores:"
|
||||
msgstr ""
|
||||
|
||||
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41
|
||||
|
||||
@ -275,7 +275,6 @@ msgstr "CA Bundle"
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:53
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU"
|
||||
msgstr "Процессор"
|
||||
|
||||
@ -298,7 +297,10 @@ msgstr "Лимиты процессора"
|
||||
msgid "CPU requests"
|
||||
msgstr "Запросы к процессору"
|
||||
|
||||
#: src/renderer/components/+workspaces/workspaces.tsx:119
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "CPU:"
|
||||
msgstr "CPU:"
|
||||
|
||||
#: src/renderer/components/confirm-dialog/confirm-dialog.tsx:44
|
||||
#: src/renderer/components/dock/info-panel.tsx:97
|
||||
#: src/renderer/components/wizard/wizard.tsx:130
|
||||
@ -664,13 +666,12 @@ msgstr "Нужный уровень реплик"
|
||||
#: src/renderer/components/+nodes/node-details.tsx:65
|
||||
#: src/renderer/components/+nodes/nodes.tsx:115
|
||||
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk"
|
||||
msgstr "Диск"
|
||||
|
||||
#: src/renderer/components/+preferences/preferences.tsx:171
|
||||
msgid "Does not affect cluster communications!"
|
||||
msgstr ""
|
||||
#: src/renderer/components/+nodes/nodes.tsx:71
|
||||
msgid "Disk:"
|
||||
msgstr "Диск:"
|
||||
|
||||
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
|
||||
msgid "Domains"
|
||||
@ -1146,7 +1147,6 @@ msgstr ""
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:63
|
||||
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
|
||||
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory"
|
||||
msgstr "Память"
|
||||
|
||||
@ -1168,6 +1168,10 @@ msgstr "Запросы к памяти"
|
||||
msgid "Memory usage"
|
||||
msgstr "Использование памяти"
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:63
|
||||
msgid "Memory:"
|
||||
msgstr "Память:"
|
||||
|
||||
#: src/renderer/components/+cluster/cluster-issues.tsx:100
|
||||
#: src/renderer/components/+events/event-details.tsx:30
|
||||
#: src/renderer/components/+events/events.tsx:62
|
||||
@ -2390,8 +2394,8 @@ msgid "and <0>{tailCount}</0> more"
|
||||
msgstr "и <0>{tailCount}</0> ещё"
|
||||
|
||||
#: src/renderer/components/+nodes/nodes.tsx:55
|
||||
msgid "cores"
|
||||
msgstr "ядер"
|
||||
msgid "cores:"
|
||||
msgstr "ядер:"
|
||||
|
||||
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41
|
||||
msgid "exit code"
|
||||
|
||||
@ -20,31 +20,16 @@ export class ApiManager {
|
||||
|
||||
getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) {
|
||||
if (typeof pathOrCallback === "string") {
|
||||
const { apiBase } = KubeApi.parseApi(pathOrCallback);
|
||||
const api = this.apis.get(pathOrCallback) || this.apis.get(apiBase);
|
||||
if (!api) {
|
||||
throw `"${apiBase}" is an unsupported kubernetes API`;
|
||||
}
|
||||
|
||||
return api;
|
||||
return this.apis.get(pathOrCallback) || this.apis.get(KubeApi.parseApi(pathOrCallback).apiBase);
|
||||
}
|
||||
|
||||
return Array.from(this.apis.values()).find(pathOrCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* registerApi registers the provided api under its `apiBase` URL.
|
||||
* @param api the KubeApi object to register
|
||||
* @returns true if the KubeApi is a new entry, false if already
|
||||
* present (and not updated)
|
||||
*/
|
||||
registerApi(api: KubeApi): boolean {
|
||||
if (this.apis.has(api.apiBase)) {
|
||||
return false
|
||||
registerApi(apiBase: string, api: KubeApi) {
|
||||
if (!this.apis.has(apiBase)) {
|
||||
this.apis.set(apiBase, api);
|
||||
}
|
||||
|
||||
this.apis.set(api.apiBase, api);
|
||||
return true;
|
||||
}
|
||||
|
||||
protected resolveApi(api: string | KubeApi): KubeApi {
|
||||
@ -52,17 +37,13 @@ export class ApiManager {
|
||||
return api;
|
||||
}
|
||||
|
||||
/**
|
||||
* unregisterApi removes the
|
||||
* @param api the apiBase or KubeApi object to remove from the map
|
||||
* @returns true if the item was removed, false if not present
|
||||
*/
|
||||
unregisterApi(api: string | KubeApi): boolean {
|
||||
if (typeof api === "string") {
|
||||
return this.apis.delete(api)
|
||||
unregisterApi(api: string | KubeApi) {
|
||||
if (typeof api === "string") this.apis.delete(api);
|
||||
else {
|
||||
const apis = Array.from(this.apis.entries());
|
||||
const entry = apis.find(entry => entry[1] === api);
|
||||
if (entry) this.unregisterApi(entry[0]);
|
||||
}
|
||||
|
||||
return this.apis.delete(api.apiBase);
|
||||
}
|
||||
|
||||
registerStore(api: KubeApi, store: KubeObjectStore) {
|
||||
@ -73,7 +54,11 @@ export class ApiManager {
|
||||
return this.stores.get(this.resolveApi(api));
|
||||
}
|
||||
|
||||
private registerViewsForApi(api: KubeApi, views: ApiComponents) {
|
||||
registerViews(api: KubeApi | KubeApi[], views: ApiComponents) {
|
||||
if (Array.isArray(api)) {
|
||||
api.forEach(api => this.registerViews(api, views));
|
||||
return;
|
||||
}
|
||||
const currentViews = this.views.get(api) || {};
|
||||
this.views.set(api, {
|
||||
...currentViews,
|
||||
@ -81,14 +66,6 @@ export class ApiManager {
|
||||
});
|
||||
}
|
||||
|
||||
registerViews(api: KubeApi | KubeApi[], views: ApiComponents) {
|
||||
if (Array.isArray(api)) {
|
||||
api.forEach(api => this.registerViewsForApi(api, views));
|
||||
} else {
|
||||
this.registerViewsForApi(api, views);
|
||||
}
|
||||
}
|
||||
|
||||
getViews(api: string | KubeApi): ApiComponents {
|
||||
return this.views.get(this.resolveApi(api)) || {}
|
||||
}
|
||||
|
||||
@ -123,25 +123,13 @@ const tests: KubeApi_Parse_Test[] = [
|
||||
namespace: undefined,
|
||||
},
|
||||
},
|
||||
{
|
||||
url: "/apis/apiextensions.k8s.io/v1/customresourcedefinitions/workspaceroles.iam.kubesphere.io",
|
||||
expected: {
|
||||
apiBase: "/apis/apiextensions.k8s.io/v1/customresourcedefinitions",
|
||||
apiPrefix: "/apis",
|
||||
apiGroup: "apiextensions.k8s.io",
|
||||
apiVersion: "v1",
|
||||
apiVersionWithGroup: "apiextensions.k8s.io/v1",
|
||||
resource: "customresourcedefinitions",
|
||||
name: "workspaceroles.iam.kubesphere.io",
|
||||
namespace: undefined,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
describe.only("parseApi unit tests", () => {
|
||||
for (const { url, expected } of tests) {
|
||||
test(`testing "${url}"`, () => {
|
||||
expect(parseApi(url)).toStrictEqual(expected);
|
||||
for (const i in tests) {
|
||||
const { url: tUrl, expected:tExpect} = tests[i];
|
||||
test(`test #${parseInt(i)+1}`, () => {
|
||||
expect(parseApi(tUrl)).toStrictEqual(tExpect);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@ -68,7 +68,7 @@ export class KubeApi<T extends KubeObject = any> {
|
||||
this.objectConstructor = objectConstructor;
|
||||
|
||||
this.parseResponse = this.parseResponse.bind(this);
|
||||
apiManager.registerApi(this);
|
||||
apiManager.registerApi(apiBase, this);
|
||||
}
|
||||
|
||||
setResourceVersion(namespace = "", newVersion: string) {
|
||||
|
||||
@ -36,66 +36,66 @@ enum sortBy {
|
||||
interface Props extends RouteComponentProps<INodesRouteParams> {
|
||||
}
|
||||
|
||||
function renderCpuUsage(node: Node) {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["cpuUsage", "cpuCapacity"]);
|
||||
if (!metrics?.[1]) {
|
||||
return <LineProgress value={0} />;
|
||||
@observer
|
||||
export class Nodes extends React.Component<Props> {
|
||||
private metricsWatcher = interval(30, () => nodesStore.loadUsageMetrics());
|
||||
|
||||
componentDidMount() {
|
||||
this.metricsWatcher.start(true);
|
||||
}
|
||||
|
||||
const [usage, cores] = metrics;
|
||||
const percentage = Math.ceil(usage * 100) / cores;
|
||||
const CPUTrans = _i18n._(t`CPU`);
|
||||
const CoreTrans = _i18n._(t`cores`);
|
||||
|
||||
return <LineProgress
|
||||
max={cores}
|
||||
value={usage}
|
||||
tooltip={`${CPUTrans}: ${percentage.toPrecision(4)}%, ${CoreTrans}: ${cores}`}
|
||||
/>;
|
||||
}
|
||||
|
||||
function renderMemoryUsage(node: Node) {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]);
|
||||
if (!metrics?.[1]) {
|
||||
return <LineProgress value={0} />;
|
||||
componentWillUnmount() {
|
||||
this.metricsWatcher.stop();
|
||||
}
|
||||
|
||||
const [usage, capacity] = metrics;
|
||||
const percentage = Math.ceil(usage * 100 / capacity);
|
||||
const MemoryTrans = _i18n._(t`Memory`);
|
||||
|
||||
return <LineProgress
|
||||
max={capacity}
|
||||
value={usage}
|
||||
tooltip={`${MemoryTrans}: ${percentage.toPrecision(4)}%, ${bytesToUnits(usage, 3)}`}
|
||||
/>;
|
||||
}
|
||||
|
||||
function renderDiskUsage(node: Node): any {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["fsUsage", "fsSize"]);
|
||||
if (!metrics?.[1]) {
|
||||
return <LineProgress value={0} />;
|
||||
renderCpuUsage(node: Node) {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["cpuUsage", "cpuCapacity"]);
|
||||
if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
|
||||
const usage = metrics[0];
|
||||
const cores = metrics[1];
|
||||
return (
|
||||
<LineProgress
|
||||
max={cores}
|
||||
value={usage}
|
||||
tooltip={_i18n._(t`CPU:`) + ` ${Math.ceil(usage * 100) / cores}\%, ` + _i18n._(t`cores:`) + ` ${cores}`}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
const [usage, capacity] = metrics;
|
||||
const percentage = Math.ceil(usage * 100 / capacity);
|
||||
const DiskTrans = _i18n._(t`Disk`);
|
||||
|
||||
return <LineProgress
|
||||
max={capacity}
|
||||
value={usage}
|
||||
tooltip={`${DiskTrans}: ${percentage.toPrecision(4)}%, ${bytesToUnits(usage, 3)}`}
|
||||
/>;
|
||||
}
|
||||
|
||||
function renderConditions(node: Node) {
|
||||
if (!node.status.conditions) {
|
||||
return null
|
||||
renderMemoryUsage(node: Node) {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]);
|
||||
if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
|
||||
const usage = metrics[0];
|
||||
const capacity = metrics[1];
|
||||
return (
|
||||
<LineProgress
|
||||
max={capacity}
|
||||
value={usage}
|
||||
tooltip={_i18n._(t`Memory:`) + ` ${Math.ceil(usage * 100 / capacity)}%, ${bytesToUnits(usage, 3)}`}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
return node
|
||||
.getActiveConditions()
|
||||
.map(condition => {
|
||||
renderDiskUsage(node: Node): any {
|
||||
const metrics = nodesStore.getLastMetricValues(node, ["fsUsage", "fsSize"]);
|
||||
if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
|
||||
const usage = metrics[0];
|
||||
const capacity = metrics[1];
|
||||
return (
|
||||
<LineProgress
|
||||
max={capacity}
|
||||
value={usage}
|
||||
tooltip={_i18n._(t`Disk:`) + ` ${Math.ceil(usage * 100 / capacity)}%, ${bytesToUnits(usage, 3)}`}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
renderConditions(node: Node) {
|
||||
if (!node.status.conditions) {
|
||||
return null
|
||||
}
|
||||
const conditions = node.getActiveConditions();
|
||||
return conditions.map(condition => {
|
||||
const { type } = condition
|
||||
const tooltipId = `node-${node.getName()}-condition-${type}`
|
||||
return (
|
||||
@ -113,18 +113,6 @@ function renderConditions(node: Node) {
|
||||
</Tooltip>
|
||||
</div>)
|
||||
})
|
||||
}
|
||||
|
||||
@observer
|
||||
export class Nodes extends React.Component<Props> {
|
||||
private metricsWatcher = interval(30, () => nodesStore.loadUsageMetrics());
|
||||
|
||||
componentDidMount() {
|
||||
this.metricsWatcher.start(true);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.metricsWatcher.stop();
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -132,8 +120,7 @@ export class Nodes extends React.Component<Props> {
|
||||
<MainLayout>
|
||||
<KubeObjectListLayout
|
||||
className="Nodes"
|
||||
store={nodesStore}
|
||||
isClusterScoped
|
||||
store={nodesStore} isClusterScoped
|
||||
isReady={nodesStore.isLoaded && nodesStore.metricsLoaded}
|
||||
dependentStores={[podsStore]}
|
||||
isSelectable={false}
|
||||
@ -170,9 +157,9 @@ export class Nodes extends React.Component<Props> {
|
||||
const tooltipId = `node-taints-${node.getId()}`;
|
||||
return [
|
||||
node.getName(),
|
||||
renderCpuUsage(node),
|
||||
renderMemoryUsage(node),
|
||||
renderDiskUsage(node),
|
||||
this.renderCpuUsage(node),
|
||||
this.renderMemoryUsage(node),
|
||||
this.renderDiskUsage(node),
|
||||
<>
|
||||
<span id={tooltipId}>{node.getTaints().length}</span>
|
||||
<Tooltip htmlFor={tooltipId} style={{ whiteSpace: "pre-line" }}>
|
||||
@ -182,10 +169,12 @@ export class Nodes extends React.Component<Props> {
|
||||
node.getRoleLabels(),
|
||||
node.status.nodeInfo.kubeletVersion,
|
||||
node.getAge(),
|
||||
renderConditions(node),
|
||||
this.renderConditions(node),
|
||||
]
|
||||
}}
|
||||
renderItemMenu={(item: Node) => <NodeMenu object={item} />}
|
||||
renderItemMenu={(item: Node) => {
|
||||
return <NodeMenu object={item}/>
|
||||
}}
|
||||
/>
|
||||
</MainLayout>
|
||||
)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user