UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

169 lines (141 loc) 4.04 kB
import { KubeObject, KubeObjectInterface } from '@kinvolk/headlamp-plugin/lib/k8s/cluster'; import { Conditions, KedaTrigger } from './common'; export interface ScaleTargetRef { apiVersion?: string; kind?: string; name: string; envSourceContainerName?: string; } export interface ScaledObjectFallback { failureThreshold: number; replicas: number; } export interface HPABehaviorScalingRules { stabilizationWindowSeconds?: number; policies?: Array<{ type: string; value: number; periodSeconds: number; }>; } export interface HPABehavior { scaleDown?: HPABehaviorScalingRules; scaleUp?: HPABehaviorScalingRules; } export enum ScalingModifierMetricType { AVERAGEVALUE = 'AverageValue', VALUE = 'Value', } export interface ScalingModifiers { target: number; activationTarget?: number; metricType?: ScalingModifierMetricType; formula: string; } export interface ScaledObjectAdvanced { restoreToOriginalReplicaCount?: boolean; horizontalPodAutoscalerConfig?: { name?: string; behavior?: HPABehavior; }; scalingModifiers?: ScalingModifiers; } export interface ScaleTargetGVKR { group: string; version: string; kind: string; resource: string; } export enum HealthStatus { HAPPY = 'Happy', FAILING = 'Failing', } export interface KedaScaledObject extends KubeObjectInterface { spec: { scaleTargetRef: ScaleTargetRef; pollingInterval?: number; cooldownPeriod?: number; initialCooldownPeriod?: number; idleReplicaCount?: number; minReplicaCount?: number; maxReplicaCount?: number; fallback?: ScaledObjectFallback; advanced?: ScaledObjectAdvanced; triggers: KedaTrigger[]; }; status?: { scaleTargetKind?: string; scaleTargetGVKR?: ScaleTargetGVKR; originalReplicaCount?: number; lastActiveTime?: string; externalMetricNames?: string[]; resourceMetricNames?: string[]; compositeScalerName?: string; conditions?: Conditions; health?: { [key: string]: { numberOfFailures?: number; status?: HealthStatus; }; }; pausedReplicaCount?: number; hpaName?: string; triggersTypes?: string; authenticationsTypes?: string; }; } export class ScaledObject extends KubeObject<KedaScaledObject> { static apiVersion = 'keda.sh/v1alpha1'; static kind = 'ScaledObject'; static apiName = 'scaledobjects'; static isNamespaced = true; // Note: This workaround is needed to make the plugin compatible with older versions of Headlamp static get detailsRoute() { return '/keda/scaledobjects/:namespace/:name'; } get spec() { return this.jsonData.spec; } get status() { return this.jsonData.status || {}; } get readyStatus(): string { return this.status?.conditions?.find(condition => condition.type === 'Ready')?.status; } get activeStatus(): string { return this.status?.conditions?.find(condition => condition.type === 'Active')?.status; } get fallbackStatus(): string { return this.status?.conditions?.find(condition => condition.type === 'Fallback')?.status; } get pausedStatus(): string { return this.status?.conditions?.find(condition => condition.type === 'Paused')?.status; } get scaleTargetApiVersion(): string { return this.spec.scaleTargetRef?.apiVersion || 'apps/v1'; } get scaleTargetKind(): string { return this.spec.scaleTargetRef?.kind || 'Deployment'; } get scaleTargetName(): string { return this.spec.scaleTargetRef?.name; } get pollingInterval(): number { return this.spec.pollingInterval || 30; } get cooldownPeriod(): number { return this.spec.cooldownPeriod || 300; } get initialCooldownPeriod(): number { return this.spec.initialCooldownPeriod || 0; } get idleReplicaCount(): number | undefined { return this.spec.idleReplicaCount; } get minReplicaCount(): number { return this.spec.minReplicaCount || 0; } get maxReplicaCount(): number { return this.spec.maxReplicaCount || 100; } }