1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/api/endpoints/endpoint.api.ts
Lauri Nevala f12b2b6a99
Implement endpoints section (#246)
Signed-off-by: Lauri Nevala <lauri.nevala@gmail.com>
2020-04-13 18:20:19 +03:00

123 lines
2.5 KiB
TypeScript

import { autobind } from "../../utils";
import { KubeObject } from "../kube-object";
import { KubeApi } from "../kube-api";
export interface IEndpointPort {
name?: string;
protocol: string;
port: number;
}
export interface IEndpointAddress {
hostname: string;
ip: string;
nodeName: string;
}
export interface IEndpointSubset {
addresses: IEndpointAddress[];
notReadyAddresses: IEndpointAddress[];
ports: IEndpointPort[];
}
interface ITargetRef {
kind: string;
namespace: string;
name: string;
uid: string;
resourceVersion: string;
apiVersion: string;
}
export class EndpointAddress implements IEndpointAddress {
hostname: string;
ip: string;
nodeName: string;
targetRef?: {
kind: string;
namespace: string;
name: string;
uid: string;
resourceVersion: string;
};
constructor(data: IEndpointAddress) {
Object.assign(this, data)
}
getId() {
return this.ip
}
getName() {
return this.hostname
}
getTargetRef(): ITargetRef {
if (this.targetRef) {
return Object.assign(this.targetRef, {apiVersion: "v1"})
} else {
return null
}
}
}
export class EndpointSubset implements IEndpointSubset {
addresses: IEndpointAddress[];
notReadyAddresses: IEndpointAddress[];
ports: IEndpointPort[];
constructor(data: IEndpointSubset) {
Object.assign(this, data)
}
getAddresses(): EndpointAddress[] {
const addresses = this.addresses || [];
return addresses.map(a => new EndpointAddress(a));
}
getNotReadyAddresses(): EndpointAddress[] {
const notReadyAddresses = this.notReadyAddresses || [];
return notReadyAddresses.map(a => new EndpointAddress(a));
}
toString(): string {
if(!this.addresses) {
return ""
}
return this.addresses.map(address => {
return this.ports.map(port => {
return `${address.ip}:${port.port}`
}).join(", ")
}).join(", ")
}
}
@autobind()
export class Endpoint extends KubeObject {
static kind = "Endpoint"
subsets: IEndpointSubset[]
getEndpointSubsets(): EndpointSubset[] {
const subsets = this.subsets || [];
return subsets.map(s => new EndpointSubset(s));
}
toString(): string {
if(this.subsets) {
return this.getEndpointSubsets().map(es => es.toString()).join(", ")
} else {
return "<none>"
}
}
}
export const endpointApi = new KubeApi({
kind: Endpoint.kind,
apiBase: "/api/v1/endpoints",
isNamespaced: true,
objectConstructor: Endpoint,
});