1
0
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:
Sebastian Malton 2020-08-10 09:24:19 -04:00
parent 2af58cde72
commit 4dad9eec13
7 changed files with 119 additions and 149 deletions

View File

@ -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:53
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
#: src/renderer/components/+nodes/nodes.tsx:55
msgid "CPU" msgid "CPU"
msgstr "CPU" msgstr "CPU"
@ -297,7 +296,10 @@ msgstr "CPU limits"
msgid "CPU requests" msgid "CPU requests"
msgstr "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/confirm-dialog/confirm-dialog.tsx:44
#: src/renderer/components/dock/info-panel.tsx:97 #: src/renderer/components/dock/info-panel.tsx:97
#: src/renderer/components/wizard/wizard.tsx:130 #: 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/node-details.tsx:65
#: src/renderer/components/+nodes/nodes.tsx:115 #: src/renderer/components/+nodes/nodes.tsx:115
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44 #: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
#: src/renderer/components/+nodes/nodes.tsx:71
msgid "Disk" msgid "Disk"
msgstr "Disk" msgstr "Disk"
#: src/renderer/components/+preferences/preferences.tsx:171 #: src/renderer/components/+nodes/nodes.tsx:71
msgid "Does not affect cluster communications!" msgid "Disk:"
msgstr "Does not affect cluster communications!" msgstr "Disk:"
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
msgid "Domains" 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:63
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
#: src/renderer/components/+nodes/nodes.tsx:63
msgid "Memory" msgid "Memory"
msgstr "Memory" msgstr "Memory"
@ -1167,6 +1167,10 @@ msgstr "Memory requests"
msgid "Memory usage" msgid "Memory usage"
msgstr "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/+cluster/cluster-issues.tsx:100
#: src/renderer/components/+events/event-details.tsx:30 #: src/renderer/components/+events/event-details.tsx:30
#: src/renderer/components/+events/events.tsx:62 #: src/renderer/components/+events/events.tsx:62
@ -2389,8 +2393,8 @@ msgid "and <0>{tailCount}</0> more"
msgstr "and <0>{tailCount}</0> more" msgstr "and <0>{tailCount}</0> more"
#: src/renderer/components/+nodes/nodes.tsx:55 #: src/renderer/components/+nodes/nodes.tsx:55
msgid "cores" msgid "cores:"
msgstr "cores" msgstr "cores:"
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41 #: src/renderer/components/+workloads-pods/pod-details-container.tsx:41
msgid "exit code" msgid "exit code"

View File

@ -274,7 +274,6 @@ msgstr ""
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:53 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:53
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
#: src/renderer/components/+nodes/nodes.tsx:55
msgid "CPU" msgid "CPU"
msgstr "" msgstr ""
@ -297,7 +296,10 @@ msgstr ""
msgid "CPU requests" msgid "CPU requests"
msgstr "" 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/confirm-dialog/confirm-dialog.tsx:44
#: src/renderer/components/dock/info-panel.tsx:97 #: src/renderer/components/dock/info-panel.tsx:97
#: src/renderer/components/wizard/wizard.tsx:130 #: src/renderer/components/wizard/wizard.tsx:130
@ -659,10 +661,13 @@ msgstr ""
#: src/renderer/components/+nodes/node-details.tsx:65 #: src/renderer/components/+nodes/node-details.tsx:65
#: src/renderer/components/+nodes/nodes.tsx:115 #: src/renderer/components/+nodes/nodes.tsx:115
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44 #: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
#: src/renderer/components/+nodes/nodes.tsx:71
msgid "Disk" msgid "Disk"
msgstr "" msgstr ""
#: src/renderer/components/+nodes/nodes.tsx:71
msgid "Disk:"
msgstr ""
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
msgid "Domains" msgid "Domains"
msgstr "" 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:63
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
#: src/renderer/components/+nodes/nodes.tsx:63
msgid "Memory" msgid "Memory"
msgstr "" msgstr ""
@ -1154,6 +1158,10 @@ msgstr ""
msgid "Memory usage" msgid "Memory usage"
msgstr "" msgstr ""
#: src/renderer/components/+nodes/nodes.tsx:63
msgid "Memory:"
msgstr ""
#: src/renderer/components/+cluster/cluster-issues.tsx:100 #: src/renderer/components/+cluster/cluster-issues.tsx:100
#: src/renderer/components/+events/event-details.tsx:30 #: src/renderer/components/+events/event-details.tsx:30
#: src/renderer/components/+events/events.tsx:62 #: src/renderer/components/+events/events.tsx:62
@ -2368,7 +2376,7 @@ msgid "and <0>{tailCount}</0> more"
msgstr "" msgstr ""
#: src/renderer/components/+nodes/nodes.tsx:55 #: src/renderer/components/+nodes/nodes.tsx:55
msgid "cores" msgid "cores:"
msgstr "" msgstr ""
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41 #: src/renderer/components/+workloads-pods/pod-details-container.tsx:41

View File

@ -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:53
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:95 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:95
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:13
#: src/renderer/components/+nodes/nodes.tsx:55
msgid "CPU" msgid "CPU"
msgstr "Процессор" msgstr "Процессор"
@ -298,7 +297,10 @@ msgstr "Лимиты процессора"
msgid "CPU requests" msgid "CPU requests"
msgstr "Запросы к процессору" 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/confirm-dialog/confirm-dialog.tsx:44
#: src/renderer/components/dock/info-panel.tsx:97 #: src/renderer/components/dock/info-panel.tsx:97
#: src/renderer/components/wizard/wizard.tsx:130 #: src/renderer/components/wizard/wizard.tsx:130
@ -664,13 +666,12 @@ msgstr "Нужный уровень реплик"
#: src/renderer/components/+nodes/node-details.tsx:65 #: src/renderer/components/+nodes/node-details.tsx:65
#: src/renderer/components/+nodes/nodes.tsx:115 #: src/renderer/components/+nodes/nodes.tsx:115
#: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44 #: src/renderer/components/+storage-volume-claims/volume-claim-details.tsx:44
#: src/renderer/components/+nodes/nodes.tsx:71
msgid "Disk" msgid "Disk"
msgstr "Диск" msgstr "Диск"
#: src/renderer/components/+preferences/preferences.tsx:171 #: src/renderer/components/+nodes/nodes.tsx:71
msgid "Does not affect cluster communications!" msgid "Disk:"
msgstr "" msgstr "Диск:"
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89 #: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:89
msgid "Domains" 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:63
#: src/renderer/components/+workloads-pods/pod-details-list.tsx:96 #: src/renderer/components/+workloads-pods/pod-details-list.tsx:96
#: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18 #: src/renderer/components/resource-metrics/resource-metrics-text.tsx:18
#: src/renderer/components/+nodes/nodes.tsx:63
msgid "Memory" msgid "Memory"
msgstr "Память" msgstr "Память"
@ -1168,6 +1168,10 @@ msgstr "Запросы к памяти"
msgid "Memory usage" msgid "Memory usage"
msgstr "Использование памяти" msgstr "Использование памяти"
#: src/renderer/components/+nodes/nodes.tsx:63
msgid "Memory:"
msgstr "Память:"
#: src/renderer/components/+cluster/cluster-issues.tsx:100 #: src/renderer/components/+cluster/cluster-issues.tsx:100
#: src/renderer/components/+events/event-details.tsx:30 #: src/renderer/components/+events/event-details.tsx:30
#: src/renderer/components/+events/events.tsx:62 #: src/renderer/components/+events/events.tsx:62
@ -2390,8 +2394,8 @@ msgid "and <0>{tailCount}</0> more"
msgstr "и <0>{tailCount}</0> ещё" msgstr "и <0>{tailCount}</0> ещё"
#: src/renderer/components/+nodes/nodes.tsx:55 #: src/renderer/components/+nodes/nodes.tsx:55
msgid "cores" msgid "cores:"
msgstr "ядер" msgstr "ядер:"
#: src/renderer/components/+workloads-pods/pod-details-container.tsx:41 #: src/renderer/components/+workloads-pods/pod-details-container.tsx:41
msgid "exit code" msgid "exit code"

View File

@ -20,31 +20,16 @@ export class ApiManager {
getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) { getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) {
if (typeof pathOrCallback === "string") { if (typeof pathOrCallback === "string") {
const { apiBase } = KubeApi.parseApi(pathOrCallback); return this.apis.get(pathOrCallback) || this.apis.get(KubeApi.parseApi(pathOrCallback).apiBase);
const api = this.apis.get(pathOrCallback) || this.apis.get(apiBase);
if (!api) {
throw `"${apiBase}" is an unsupported kubernetes API`;
}
return api;
} }
return Array.from(this.apis.values()).find(pathOrCallback); return Array.from(this.apis.values()).find(pathOrCallback);
} }
/** registerApi(apiBase: string, api: KubeApi) {
* registerApi registers the provided api under its `apiBase` URL. if (!this.apis.has(apiBase)) {
* @param api the KubeApi object to register this.apis.set(apiBase, api);
* @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
} }
this.apis.set(api.apiBase, api);
return true;
} }
protected resolveApi(api: string | KubeApi): KubeApi { protected resolveApi(api: string | KubeApi): KubeApi {
@ -52,17 +37,13 @@ export class ApiManager {
return api; return api;
} }
/** unregisterApi(api: string | KubeApi) {
* unregisterApi removes the if (typeof api === "string") this.apis.delete(api);
* @param api the apiBase or KubeApi object to remove from the map else {
* @returns true if the item was removed, false if not present const apis = Array.from(this.apis.entries());
*/ const entry = apis.find(entry => entry[1] === api);
unregisterApi(api: string | KubeApi): boolean { if (entry) this.unregisterApi(entry[0]);
if (typeof api === "string") {
return this.apis.delete(api)
} }
return this.apis.delete(api.apiBase);
} }
registerStore(api: KubeApi, store: KubeObjectStore) { registerStore(api: KubeApi, store: KubeObjectStore) {
@ -73,7 +54,11 @@ export class ApiManager {
return this.stores.get(this.resolveApi(api)); 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) || {}; const currentViews = this.views.get(api) || {};
this.views.set(api, { this.views.set(api, {
...currentViews, ...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 { getViews(api: string | KubeApi): ApiComponents {
return this.views.get(this.resolveApi(api)) || {} return this.views.get(this.resolveApi(api)) || {}
} }

View File

@ -123,25 +123,13 @@ const tests: KubeApi_Parse_Test[] = [
namespace: undefined, 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", () => { describe.only("parseApi unit tests", () => {
for (const { url, expected } of tests) { for (const i in tests) {
test(`testing "${url}"`, () => { const { url: tUrl, expected:tExpect} = tests[i];
expect(parseApi(url)).toStrictEqual(expected); test(`test #${parseInt(i)+1}`, () => {
expect(parseApi(tUrl)).toStrictEqual(tExpect);
}); });
} }
}); });

View File

@ -68,7 +68,7 @@ export class KubeApi<T extends KubeObject = any> {
this.objectConstructor = objectConstructor; this.objectConstructor = objectConstructor;
this.parseResponse = this.parseResponse.bind(this); this.parseResponse = this.parseResponse.bind(this);
apiManager.registerApi(this); apiManager.registerApi(apiBase, this);
} }
setResourceVersion(namespace = "", newVersion: string) { setResourceVersion(namespace = "", newVersion: string) {

View File

@ -36,66 +36,66 @@ enum sortBy {
interface Props extends RouteComponentProps<INodesRouteParams> { interface Props extends RouteComponentProps<INodesRouteParams> {
} }
function renderCpuUsage(node: Node) { @observer
const metrics = nodesStore.getLastMetricValues(node, ["cpuUsage", "cpuCapacity"]); export class Nodes extends React.Component<Props> {
if (!metrics?.[1]) { private metricsWatcher = interval(30, () => nodesStore.loadUsageMetrics());
return <LineProgress value={0} />;
componentDidMount() {
this.metricsWatcher.start(true);
} }
const [usage, cores] = metrics; componentWillUnmount() {
const percentage = Math.ceil(usage * 100) / cores; this.metricsWatcher.stop();
const CPUTrans = _i18n._(t`CPU`); }
const CoreTrans = _i18n._(t`cores`);
return <LineProgress 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} max={cores}
value={usage} value={usage}
tooltip={`${CPUTrans}: ${percentage.toPrecision(4)}%, ${CoreTrans}: ${cores}`} tooltip={_i18n._(t`CPU:`) + ` ${Math.ceil(usage * 100) / cores}\%, ` + _i18n._(t`cores:`) + ` ${cores}`}
/>; />
)
} }
function renderMemoryUsage(node: Node) { renderMemoryUsage(node: Node) {
const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]); const metrics = nodesStore.getLastMetricValues(node, ["memoryUsage", "memoryCapacity"]);
if (!metrics?.[1]) { if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
return <LineProgress value={0} />; const usage = metrics[0];
} const capacity = metrics[1];
return (
const [usage, capacity] = metrics; <LineProgress
const percentage = Math.ceil(usage * 100 / capacity);
const MemoryTrans = _i18n._(t`Memory`);
return <LineProgress
max={capacity} max={capacity}
value={usage} value={usage}
tooltip={`${MemoryTrans}: ${percentage.toPrecision(4)}%, ${bytesToUnits(usage, 3)}`} tooltip={_i18n._(t`Memory:`) + ` ${Math.ceil(usage * 100 / capacity)}%, ${bytesToUnits(usage, 3)}`}
/>; />
)
} }
function renderDiskUsage(node: Node): any { renderDiskUsage(node: Node): any {
const metrics = nodesStore.getLastMetricValues(node, ["fsUsage", "fsSize"]); const metrics = nodesStore.getLastMetricValues(node, ["fsUsage", "fsSize"]);
if (!metrics?.[1]) { if (!metrics || !metrics[1]) return <LineProgress value={0}/>;
return <LineProgress value={0} />; const usage = metrics[0];
} const capacity = metrics[1];
return (
const [usage, capacity] = metrics; <LineProgress
const percentage = Math.ceil(usage * 100 / capacity);
const DiskTrans = _i18n._(t`Disk`);
return <LineProgress
max={capacity} max={capacity}
value={usage} value={usage}
tooltip={`${DiskTrans}: ${percentage.toPrecision(4)}%, ${bytesToUnits(usage, 3)}`} tooltip={_i18n._(t`Disk:`) + ` ${Math.ceil(usage * 100 / capacity)}%, ${bytesToUnits(usage, 3)}`}
/>; />
)
} }
function renderConditions(node: Node) { renderConditions(node: Node) {
if (!node.status.conditions) { if (!node.status.conditions) {
return null return null
} }
const conditions = node.getActiveConditions();
return node return conditions.map(condition => {
.getActiveConditions()
.map(condition => {
const { type } = condition const { type } = condition
const tooltipId = `node-${node.getName()}-condition-${type}` const tooltipId = `node-${node.getName()}-condition-${type}`
return ( return (
@ -115,25 +115,12 @@ function renderConditions(node: Node) {
}) })
} }
@observer
export class Nodes extends React.Component<Props> {
private metricsWatcher = interval(30, () => nodesStore.loadUsageMetrics());
componentDidMount() {
this.metricsWatcher.start(true);
}
componentWillUnmount() {
this.metricsWatcher.stop();
}
render() { render() {
return ( return (
<MainLayout> <MainLayout>
<KubeObjectListLayout <KubeObjectListLayout
className="Nodes" className="Nodes"
store={nodesStore} store={nodesStore} isClusterScoped
isClusterScoped
isReady={nodesStore.isLoaded && nodesStore.metricsLoaded} isReady={nodesStore.isLoaded && nodesStore.metricsLoaded}
dependentStores={[podsStore]} dependentStores={[podsStore]}
isSelectable={false} isSelectable={false}
@ -170,9 +157,9 @@ export class Nodes extends React.Component<Props> {
const tooltipId = `node-taints-${node.getId()}`; const tooltipId = `node-taints-${node.getId()}`;
return [ return [
node.getName(), node.getName(),
renderCpuUsage(node), this.renderCpuUsage(node),
renderMemoryUsage(node), this.renderMemoryUsage(node),
renderDiskUsage(node), this.renderDiskUsage(node),
<> <>
<span id={tooltipId}>{node.getTaints().length}</span> <span id={tooltipId}>{node.getTaints().length}</span>
<Tooltip htmlFor={tooltipId} style={{ whiteSpace: "pre-line" }}> <Tooltip htmlFor={tooltipId} style={{ whiteSpace: "pre-line" }}>
@ -182,10 +169,12 @@ export class Nodes extends React.Component<Props> {
node.getRoleLabels(), node.getRoleLabels(),
node.status.nodeInfo.kubeletVersion, node.status.nodeInfo.kubeletVersion,
node.getAge(), node.getAge(),
renderConditions(node), this.renderConditions(node),
] ]
}} }}
renderItemMenu={(item: Node) => <NodeMenu object={item} />} renderItemMenu={(item: Node) => {
return <NodeMenu object={item}/>
}}
/> />
</MainLayout> </MainLayout>
) )