1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Merge branch 'master' into vue_react_migration

This commit is contained in:
Lauri Nevala 2020-08-19 11:19:33 +03:00 committed by GitHub
commit fa4407b02e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 143 additions and 79 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020 Lakend Labs, Inc.
Copyright (c) 2020 Mirantis, Inc.
All rights reserved.

View File

@ -822,7 +822,7 @@ msgid "Driver"
msgstr "Driver"
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59
#: src/renderer/components/+network-ingresses/ingress-details.tsx:67
#: src/renderer/components/+network-ingresses/ingress-details.tsx:87
msgid "Duration"
msgstr "Duration"
@ -1048,6 +1048,7 @@ msgstr "Host: {0}"
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76
#: src/renderer/components/+network-ingresses/ingress-details.tsx:64
msgid "Hostname"
msgstr "Hostname"
@ -1055,6 +1056,10 @@ msgstr "Hostname"
msgid "Http01"
msgstr "Http01"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:65
msgid "IP"
msgstr "IP"
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53
msgid "IP addresses"
msgstr "IP addresses"
@ -1235,8 +1240,10 @@ msgstr "Limited to {0}"
#: src/renderer/components/+cluster/cluster-pie-charts.tsx:72
#: src/renderer/components/+cluster/cluster-pie-charts.tsx:115
#: src/renderer/components/+workloads-pods/container-charts.tsx:40
#: src/renderer/components/+workloads-pods/container-charts.tsx:64
#: src/renderer/components/+workloads-pods/pod-charts.tsx:48
#: src/renderer/components/+workloads-pods/pod-charts.tsx:72
msgid "Limits"
@ -1258,6 +1265,10 @@ msgstr "Liveness"
msgid "Load Balancer IP"
msgstr "Load Balancer IP"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:108
msgid "Load-Balancer Ingress Points"
msgstr "Load-Balancer Ingress Points"
#: src/renderer/components/app-init/app-init.tsx:43
msgid "Loading"
msgstr "Loading"
@ -1756,7 +1767,7 @@ msgid "Port"
msgstr "Port"
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83
#: src/renderer/components/+network-ingresses/ingress-details.tsx:74
#: src/renderer/components/+network-ingresses/ingress-details.tsx:94
#: src/renderer/components/+network-policies/network-policy-details.tsx:96
#: src/renderer/components/+network-policies/network-policy-details.tsx:109
#: src/renderer/components/+network-services/service-details.tsx:59
@ -2080,7 +2091,7 @@ msgstr "Rollback <0>{releaseName}</0>"
msgid "Rule"
msgstr "Rule"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:85
#: src/renderer/components/+network-ingresses/ingress-details.tsx:105
#: src/renderer/components/+network-ingresses/ingresses.tsx:34
#: src/renderer/components/+user-management-roles/role-details.tsx:25
msgid "Rules"
@ -2212,7 +2223,7 @@ msgstr "Selector"
msgid "Server"
msgstr "Server"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:82
#: src/renderer/components/+network-ingresses/ingress-details.tsx:102
msgid "Service"
msgstr "Service"
@ -2379,7 +2390,7 @@ msgstr "Supplemental Groups"
msgid "Suspend"
msgstr "Suspend"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:78
#: src/renderer/components/+network-ingresses/ingress-details.tsx:98
msgid "TLS"
msgstr "TLS"

View File

@ -318,6 +318,7 @@ msgstr ""
#~ msgid "Build version"
#~ msgstr ""
#: src/renderer/components/+workloads-pods/container-charts.tsx:75
#: src/renderer/components/+workloads-pods/pod-charts.tsx:100
msgid "Bytes consumed on this filesystem"
@ -818,7 +819,7 @@ msgid "Driver"
msgstr ""
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59
#: src/renderer/components/+network-ingresses/ingress-details.tsx:67
#: src/renderer/components/+network-ingresses/ingress-details.tsx:87
msgid "Duration"
msgstr ""
@ -1039,6 +1040,7 @@ msgstr ""
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76
#: src/renderer/components/+network-ingresses/ingress-details.tsx:64
msgid "Hostname"
msgstr ""
@ -1046,6 +1048,10 @@ msgstr ""
msgid "Http01"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:65
msgid "IP"
msgstr ""
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53
msgid "IP addresses"
msgstr ""
@ -1249,6 +1255,10 @@ msgstr ""
msgid "Load Balancer IP"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:108
msgid "Load-Balancer Ingress Points"
msgstr ""
#: src/renderer/components/app-init/app-init.tsx:43
msgid "Loading"
msgstr ""
@ -1739,7 +1749,7 @@ msgid "Port"
msgstr ""
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83
#: src/renderer/components/+network-ingresses/ingress-details.tsx:74
#: src/renderer/components/+network-ingresses/ingress-details.tsx:94
#: src/renderer/components/+network-policies/network-policy-details.tsx:96
#: src/renderer/components/+network-policies/network-policy-details.tsx:109
#: src/renderer/components/+network-services/service-details.tsx:59
@ -2063,7 +2073,7 @@ msgstr ""
msgid "Rule"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:85
#: src/renderer/components/+network-ingresses/ingress-details.tsx:105
#: src/renderer/components/+network-ingresses/ingresses.tsx:34
#: src/renderer/components/+user-management-roles/role-details.tsx:25
msgid "Rules"
@ -2195,7 +2205,7 @@ msgstr ""
msgid "Server"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:82
#: src/renderer/components/+network-ingresses/ingress-details.tsx:102
msgid "Service"
msgstr ""
@ -2362,7 +2372,7 @@ msgstr ""
msgid "Suspend"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:78
#: src/renderer/components/+network-ingresses/ingress-details.tsx:98
msgid "TLS"
msgstr ""

View File

@ -823,7 +823,7 @@ msgid "Driver"
msgstr "Драйвер"
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:59
#: src/renderer/components/+network-ingresses/ingress-details.tsx:67
#: src/renderer/components/+network-ingresses/ingress-details.tsx:87
msgid "Duration"
msgstr "Продолжительность"
@ -1049,6 +1049,7 @@ msgstr "Хост: {0}"
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:33
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:64
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:76
#: src/renderer/components/+network-ingresses/ingress-details.tsx:64
msgid "Hostname"
msgstr ""
@ -1056,6 +1057,10 @@ msgstr ""
msgid "Http01"
msgstr "Http01"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:65
msgid "IP"
msgstr ""
#: src/renderer/components/+custom-resources/certmanager.k8s.io/certificate-details.tsx:53
msgid "IP addresses"
msgstr "IP-адреса"
@ -1259,6 +1264,10 @@ msgstr "Живучесть"
msgid "Load Balancer IP"
msgstr "IP балансировщика нагрузки"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:108
msgid "Load-Balancer Ingress Points"
msgstr ""
#: src/renderer/components/app-init/app-init.tsx:43
msgid "Loading"
msgstr "Загрузка"
@ -1757,7 +1766,7 @@ msgid "Port"
msgstr ""
#: src/renderer/components/+network-endpoints/endpoint-subset-list.tsx:83
#: src/renderer/components/+network-ingresses/ingress-details.tsx:74
#: src/renderer/components/+network-ingresses/ingress-details.tsx:94
#: src/renderer/components/+network-policies/network-policy-details.tsx:96
#: src/renderer/components/+network-policies/network-policy-details.tsx:109
#: src/renderer/components/+network-services/service-details.tsx:59
@ -2081,7 +2090,7 @@ msgstr "Откатить <0>{releaseName}</0>"
msgid "Rule"
msgstr ""
#: src/renderer/components/+network-ingresses/ingress-details.tsx:85
#: src/renderer/components/+network-ingresses/ingress-details.tsx:105
#: src/renderer/components/+network-ingresses/ingresses.tsx:34
#: src/renderer/components/+user-management-roles/role-details.tsx:25
msgid "Rules"
@ -2213,7 +2222,7 @@ msgstr "Селектор"
msgid "Server"
msgstr "Сервер"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:82
#: src/renderer/components/+network-ingresses/ingress-details.tsx:102
msgid "Service"
msgstr "Service"
@ -2380,7 +2389,7 @@ msgstr ""
msgid "Suspend"
msgstr "Заморозка"
#: src/renderer/components/+network-ingresses/ingress-details.tsx:78
#: src/renderer/components/+network-ingresses/ingress-details.tsx:98
msgid "TLS"
msgstr "TLS"

View File

@ -5,10 +5,11 @@
"version": "3.6.0-dev",
"main": "static/build/main.js",
"copyright": "© 2020, Lakend Labs, Inc.",
"copyright": "© 2020, Mirantis, Inc.",
"license": "MIT",
"author": {
"name": "Lakend Labs, Inc.",
"email": "info@lakendlabs.com"
"name": "Mirantis, Inc.",
"email": "info@k8slens.dev"
},
"scripts": {
"dev": "concurrently -k \"yarn dev-run -C\" \"yarn dev:main\" \"yarn dev:renderer\"",

View File

@ -22,7 +22,7 @@ export class Tracker extends Singleton {
} catch (error) {
this.visitor = ua(Tracker.GA_ID)
}
this.visitor.set("dl", "https://lensapptelemetry.lakendlabs.com")
this.visitor.set("dl", "https://telemetry.k8slens.dev")
}
protected async isTelemetryAllowed(): Promise<boolean> {

View File

@ -42,7 +42,7 @@ export function buildMenu(windowManager: WindowManager) {
`${appName}: ${app.getVersion()}`,
`Electron: ${process.versions.electron}`,
`Chrome: ${process.versions.chrome}`,
`Copyright 2020 Lakend Labs, Inc.`,
`Copyright 2020 Copyright 2020 Mirantis, Inc.`,
]
dialog.showMessageBoxSync(browserWindow, {
title: `${isWindows ? " ".repeat(2) : ""}${appName}`,
@ -178,7 +178,7 @@ export function buildMenu(windowManager: WindowManager) {
{
label: "License",
click: async () => {
shell.openExternal('https://lakendlabs.com/licenses/lens-eula.md');
shell.openExternal('https://k8slens.dev/licenses/eula.md');
},
},
{

View File

@ -130,9 +130,16 @@ export class CustomResourceDefinition extends KubeObject {
}
}
export const crdApi = new KubeApi<CustomResourceDefinition>({
export const crdBetaApi = new KubeApi<CustomResourceDefinition>({
kind: CustomResourceDefinition.kind,
apiBase: "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions",
isNamespaced: false,
objectConstructor: CustomResourceDefinition,
});
export const crdApi = new KubeApi<CustomResourceDefinition>({
kind: CustomResourceDefinition.kind,
apiBase: "/apis/apiextensions.k8s.io/v1/customresourcedefinitions",
isNamespaced: false,
objectConstructor: CustomResourceDefinition,
});

View File

@ -98,7 +98,7 @@ export class EndpointSubset implements IEndpointSubset {
@autobind()
export class Endpoint extends KubeObject {
static kind = "Endpoint"
static kind = "Endpoints"
subsets: IEndpointSubset[]

View File

@ -25,6 +25,10 @@ export interface IIngressMetrics<T = IMetrics> {
responseDurationSeconds: T;
}
export interface ILoadBalancerIngress {
hostname?: string;
ip?: string;
}
@autobind()
export class Ingress extends KubeObject {
static kind = "Ingress"
@ -52,7 +56,7 @@ export class Ingress extends KubeObject {
}
status: {
loadBalancer: {
ingress: any[];
ingress: ILoadBalancerIngress[];
};
}

View File

@ -7,6 +7,17 @@ import { KubeApi } from "../../api/kube-api";
import { CRDResourceStore } from "./crd-resource.store";
import { KubeObject } from "../../api/kube-object";
function initStore(crd: CustomResourceDefinition) {
const apiBase = crd.getResourceApiBase();
const kind = crd.getResourceKind();
const isNamespaced = crd.isNamespaced();
const api = apiManager.getApi(apiBase) || new KubeApi({ apiBase, kind, isNamespaced });
if (!apiManager.getStore(api)) {
apiManager.registerStore(api, new CRDResourceStore(api));
}
}
@autobind()
export class CRDStore extends KubeObjectStore<CustomResourceDefinition> {
api = crdApi
@ -15,9 +26,7 @@ export class CRDStore extends KubeObjectStore<CustomResourceDefinition> {
super();
// auto-init stores for crd-s
reaction(() => this.items.toJS(), items => {
items.forEach(this.initStore);
})
reaction(() => this.items.toJS(), items => items.forEach(initStore))
}
protected sortItems(items: CustomResourceDefinition[]) {
@ -27,23 +36,6 @@ export class CRDStore extends KubeObjectStore<CustomResourceDefinition> {
])
}
protected initStore(crd: CustomResourceDefinition) {
const apiBase = crd.getResourceApiBase();
let api = apiManager.getApi(apiBase);
if (!api) {
api = new KubeApi({
apiBase: apiBase,
kind: crd.getResourceKind(),
isNamespaced: crd.isNamespaced(),
});
}
let store = apiManager.getStore(api);
if (!store) {
store = new CRDResourceStore(api);
apiManager.registerStore(api, store);
}
}
@computed get groups() {
const groups: Record<string, CustomResourceDefinition[]> = {};
return this.items.reduce((groups, crd) => {
@ -63,9 +55,10 @@ export class CRDStore extends KubeObjectStore<CustomResourceDefinition> {
getByObject(obj: KubeObject) {
if (!obj) return null
const { kind, apiVersion } = obj;
return this.items.find(crd => {
return kind === crd.getResourceKind() && apiVersion === `${crd.getGroup()}/${crd.getVersion()}`
})
return this.items.find(crd => (
kind === crd.getResourceKind() && apiVersion === `${crd.getGroup()}/${crd.getVersion()}`
))
}
}

View File

@ -5,7 +5,7 @@ import { disposeOnUnmount, observer } from "mobx-react";
import { reaction } from "mobx";
import { Trans } from "@lingui/macro";
import { DrawerItem, DrawerTitle } from "../drawer";
import { Ingress, ingressApi } from "../../api/endpoints";
import { Ingress, ILoadBalancerIngress, ingressApi } from "../../api/endpoints";
import { Table, TableCell, TableHead, TableRow } from "../table";
import { KubeEventDetails } from "../+events/kube-event-details";
import { ingressStore } from "./ingress.store";
@ -66,12 +66,35 @@ export class IngressDetails extends React.Component<Props> {
})
}
renderIngressPoints(ingressPoints: ILoadBalancerIngress[]) {
if (ingressPoints.length === 0) return null
return (
<div>
<Table className="ingress-points">
<TableHead>
<TableCell className="name" ><Trans>Hostname</Trans></TableCell>
<TableCell className="ingresspoints"><Trans>IP</Trans></TableCell>
</TableHead>
{ingressPoints.map(({hostname, ip}, index) => {
return (
<TableRow key={index}>
<TableCell className="name">{hostname ? hostname : "-"}</TableCell>
<TableCell className="ingresspoints">{ip ? ip : "-"}</TableCell>
</TableRow>
)})
})
</Table>
</div>
)
}
render() {
const { object: ingress } = this.props;
if (!ingress) {
return null;
}
const { spec } = ingress;
const { spec, status } = ingress;
const ingressPoints = status?.loadBalancer?.ingress
const { metrics } = ingressStore;
const metricTabs = [
<Trans>Network</Trans>,
@ -102,6 +125,9 @@ export class IngressDetails extends React.Component<Props> {
<DrawerTitle title={<Trans>Rules</Trans>}/>
{this.renderPaths(ingress)}
<DrawerTitle title={<Trans>Load-Balancer Ingress Points</Trans>}/>
{this.renderIngressPoints(ingressPoints)}
<KubeEventDetails object={ingress}/>
</div>
)

View File

@ -64,6 +64,7 @@ export class RoleBindingDetails extends React.Component<Props> {
}
const name = roleBinding.getName();
const { roleRef } = roleBinding;
const subjects = roleBinding.getSubjects();
return (
<div className="RoleBindingDetails">
<KubeObjectMeta object={roleBinding}/>
@ -83,31 +84,33 @@ export class RoleBindingDetails extends React.Component<Props> {
</Table>
<DrawerTitle title={<Trans>Bindings</Trans>}/>
<Table selectable className="bindings box grow">
<TableHead>
<TableCell checkbox/>
<TableCell className="binding"><Trans>Binding</Trans></TableCell>
<TableCell className="type"><Trans>Type</Trans></TableCell>
<TableCell className="type"><Trans>Namespace</Trans></TableCell>
</TableHead>
{
roleBinding.getSubjects().map((subject, i) => {
const { kind, name, namespace } = subject;
const isSelected = selectedSubjects.includes(subject);
return (
<TableRow
key={i} selected={isSelected}
onClick={prevDefault(() => this.selectSubject(subject))}
>
<TableCell checkbox isChecked={isSelected}/>
<TableCell className="binding">{name}</TableCell>
<TableCell className="type">{kind}</TableCell>
<TableCell className="ns">{namespace || "-"}</TableCell>
</TableRow>
)
})
}
</Table>
{subjects.length > 0 && (
<Table selectable className="bindings box grow">
<TableHead>
<TableCell checkbox/>
<TableCell className="binding"><Trans>Binding</Trans></TableCell>
<TableCell className="type"><Trans>Type</Trans></TableCell>
<TableCell className="type"><Trans>Namespace</Trans></TableCell>
</TableHead>
{
subjects.map((subject, i) => {
const { kind, name, namespace } = subject;
const isSelected = selectedSubjects.includes(subject);
return (
<TableRow
key={i} selected={isSelected}
onClick={prevDefault(() => this.selectSubject(subject))}
>
<TableCell checkbox isChecked={isSelected}/>
<TableCell className="binding">{name}</TableCell>
<TableCell className="type">{kind}</TableCell>
<TableCell className="ns">{namespace || "-"}</TableCell>
</TableRow>
)
})
}
</Table>
)}
<KubeEventDetails object={roleBinding}/>

View File

@ -2,7 +2,7 @@
"name": "Dark (Lens)",
"type": "dark",
"description": "Original Lens dark theme",
"author": "Lakend Labs",
"author": "Mirantis",
"colors": {
"blue": "#3d90ce",
"magenta": "#c93dce",
@ -103,4 +103,4 @@
"radioActiveBackground": "#36393e",
"menuActiveBackground": "#36393e"
}
}
}

View File

@ -2,7 +2,7 @@
"name": "Light (Lens)",
"type": "light",
"description": "Original Lens light theme",
"author": "Lakend Labs",
"author": "Mirantis",
"colors": {
"blue": "#3d90ce",
"magenta": "#c93dce",
@ -104,4 +104,4 @@
"radioActiveBackground": "#f1f1f1",
"menuActiveBackground": "#e8e8e8"
}
}
}

View File

@ -39,7 +39,7 @@ export default function (): webpack.Configuration {
extractComments: {
condition: "some",
banner: [
`Lens - The Kubernetes IDE. Copyright ${new Date().getFullYear()} by Lakend Labs, Inc. All rights reserved.`
`Lens - The Kubernetes IDE. Copyright ${new Date().getFullYear()} by Mirantis, Inc. All rights reserved.`
].join("\n")
}
})