121 lines
2.2 KiB
TypeScript

import { Metadata } from "../Metadata";
import { type HasMetadata } from "../repo/ResourceRepo";
import {State} from "~/classes/Threshold";
export class Node implements HasMetadata
{
constructor (
public metadata: Metadata,
public metrics: NodeMetrics,
public status: Status,
public spec: Spec
) { }
static cpuUsageFlag(usage: number): State
{
if(usage < 20)
{
return State.GREEN;
}
if(usage < 60)
{
return State.ORANGE;
}
return State.RED;
}
static memoryUsageFlag(usage: number)
{
if(usage < 30)
{
return State.GREEN;
}
if(usage < 75)
{
return State.ORANGE;
}
return State.RED;
}
static diskUsageFlag(usage: number)
{
if(usage < 30)
{
return State.GREEN;
}
if(usage < 70)
{
return State.ORANGE;
}
return State.RED;
}
static isReady(node: Node): boolean | undefined
{
const conditions = node.status.conditions;
if(conditions != undefined)
{
for(const condition of conditions)
{
if(condition.type === "Ready" && condition.status === "True")
{
return true;
}
}
return false;
}
return undefined;
}
}
class NodeMetrics
{
absoluteCpuUsage?: number;
relativeCpuUsage?: number;
totalCpu?: number;
absoluteMemory?: number;
relativeMemory?: number;
totalMemory?: number;
runningPods?: number;
relativeDiskUsage?: number;
totalDiskSpace?: number;
}
class Spec
{
constructor (
public taints?: Taint[]
) {}
}
class Status
{
constructor (
public nodeInfo: NodeInfo
) {}
conditions?: Condition[]
}
class Condition
{
type?: string;
status?: string;
}
class Taint
{
constructor (
public key: string,
public effect: string
) {}
}
class NodeInfo
{
constructor (
public osImage: string,
public kubeletVersion: string
) {}
}