1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/dashboard/client/api/endpoints/persistent-volume-claims.api.ts
Sebastian Malton b1ff34879a cleanup Lens repo with tighter linting
Signed-off-by: Sebastian Malton <smalton@mirantis.com>
2020-07-09 17:00:23 -04:00

91 lines
2.2 KiB
TypeScript

import { KubeObject } from "../kube-object";
import { autobind } from "../../utils";
import { MatchExpression } from "../workload-kube-object";
import { Metrics, metricsApi } from "./metrics.api";
import { Pod } from "./pods.api";
import { KubeApi } from "../kube-api";
export class PersistentVolumeClaimsApi extends KubeApi<PersistentVolumeClaim> {
getMetrics(pvcName: string, namespace: string): Promise<PvcMetrics> {
return metricsApi.getMetrics({
diskUsage: { category: 'pvc', pvc: pvcName },
diskCapacity: { category: 'pvc', pvc: pvcName }
}, {
namespace
});
}
}
export interface PvcMetrics<T = Metrics> {
[key: string]: T;
diskUsage: T;
diskCapacity: T;
}
@autobind()
export class PersistentVolumeClaim extends KubeObject {
static kind = "PersistentVolumeClaim"
spec: {
accessModes: string[];
storageClassName: string;
selector: {
matchLabels: {
release: string;
};
matchExpressions: MatchExpression[];
};
resources: {
requests: {
storage: string; // 8Gi
};
};
}
status: {
phase: string; // Pending
}
getPods(allPods: Pod[]): Pod[] {
const pods = allPods.filter(pod => pod.getNs() === this.getNs());
return pods.filter(pod => {
return pod.getVolumes().filter(volume =>
volume.persistentVolumeClaim &&
volume.persistentVolumeClaim.claimName === this.getName()
).length > 0;
});
}
getStorage(): string {
if (!this.spec.resources || !this.spec.resources.requests) {
return "-";
}
return this.spec.resources.requests.storage;
}
getMatchLabels(): string[] {
if (!this.spec.selector || !this.spec.selector.matchLabels) {
return [];
}
return Object.entries(this.spec.selector.matchLabels)
.map(([name, val]) => `${name}:${val}`);
}
getMatchExpressions(): MatchExpression[] {
return this.spec.selector?.matchExpressions;
}
getStatus(): string {
if (this.status) {
return this.status.phase;
}
return "-";
}
}
export const pvcApi = new PersistentVolumeClaimsApi({
kind: PersistentVolumeClaim.kind,
apiBase: "/api/v1/persistentvolumeclaims",
isNamespaced: true,
objectConstructor: PersistentVolumeClaim,
});