import * as plugins from '../plugins.js'; import type { IBareMetal } from '../data/baremetal.js'; import type { ICluster } from '../data/cluster.js'; import type { IClusterNode, IClusterNodeMetrics, INodeAction, INodeMetricsSample, ISparkNodeRuntimeInfo, TNodeActionName } from '../data/clusternode.js'; import type { IDeployment } from '../data/deployment.js'; import type { IIdentity } from '../data/user.js'; export interface IRequest_Any_Cloudly_GetNodeConfig { method: 'getNodeConfig'; request: { nodeId: string; }; response: { configData: IClusterNode; }; } export interface IRequest_Any_Cloudly_GetNodesByCluster { method: 'getNodesByCluster'; request: { clusterId: string; }; response: { nodes: IClusterNode[]; }; } export interface IRequest_Any_Cloudly_GetNodeDeployments { method: 'getNodeDeployments'; request: { nodeId: string; }; response: { deployments: IDeployment[]; }; } export interface IReq_Any_Cloudly_CreateNodeJumpCommand extends plugins.typedrequestInterfaces.implementsTR { method: 'createNodeJumpCommand'; request: { identity: IIdentity; clusterId: string; role?: IClusterNode['data']['role']; nodeType?: IClusterNode['data']['nodeType']; ttlMs?: number; }; response: { jumpCode: string; jumpUrl: string; setupUrl: string; command: string; expiresAt: number; }; } export interface IReq_Any_Cloudly_GetNodes extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodes'; request: { identity: IIdentity; clusterId?: string; }; response: { nodes: IClusterNode[]; }; } export interface IReq_Any_Cloudly_GetNodeById extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodeById'; request: { identity: IIdentity; nodeId: string; }; response: { node: IClusterNode; }; } export interface IReq_Any_Cloudly_GetNodeDeletionImpact extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodeDeletionImpact'; request: { identity: IIdentity; nodeId: string; }; response: { node: IClusterNode; cluster?: ICluster; deployments: IDeployment[]; baremetals: IBareMetal[]; blockers: string[]; canDelete: boolean; }; } export interface IReq_Any_Cloudly_DeleteNodeById extends plugins.typedrequestInterfaces.implementsTR { method: 'deleteNodeById'; request: { identity: IIdentity; nodeId: string; }; response: { ok: boolean; }; } export interface IRequest_Spark_Cloudly_SendHeartbeat extends plugins.typedrequestInterfaces.implementsTR { method: 'sparkNodeHeartbeat'; request: { nodeId: string; nodeToken: string; metrics: IClusterNodeMetrics; runtimeInfo: ISparkNodeRuntimeInfo; }; response: { accepted: boolean; message?: string; }; } export interface IReq_Any_Cloudly_CreateNodeAction extends plugins.typedrequestInterfaces.implementsTR { method: 'createNodeAction'; request: { identity: IIdentity; nodeId: string; actionName: TNodeActionName; payload?: INodeAction['payload']; }; response: { action: INodeAction; }; } export interface IReq_Any_Cloudly_GetNodeActions extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodeActions'; request: { identity: IIdentity; nodeId: string; }; response: { actions: INodeAction[]; }; } /** * Admin UI asks Cloudly for a node's live proxy traffic rates; Cloudly * relays to the node's coreflow which queries its local coretraffic. */ export interface IReq_Any_Cloudly_GetNodeTrafficStats extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodeTrafficStats'; request: { identity: IIdentity; nodeId: string; windowSeconds?: number; }; response: { hosts: import('./routing.js').ITrafficHostStats[]; timestamp: number; }; } /** * Live resource usage of one deployment on a node. deploymentId is the swarm * task id, which is also IDeployment.id — the join key for UI rows. * cpuUsagePercent is percent of the whole node's CPU capacity (0-100). */ export interface INodeDeploymentResourceUsage { deploymentId: string; cpuUsagePercent: number; memoryUsedMB: number; /** Live verdict from coreflow's in-process health prober, when available. */ healthStatus?: 'healthy' | 'unhealthy' | 'unknown'; } /** * Admin UI asks Cloudly for a node's live per-deployment resource usage; * Cloudly relays to the node's coreflow which samples docker stats. * Polled only while a node detail view is open; not persisted. */ export interface IReq_Any_Cloudly_GetNodeResourceUsage extends plugins.typedrequestInterfaces.implementsTR { method: 'getNodeResourceUsage'; request: { identity: IIdentity; nodeId: string; }; response: { deployments: INodeDeploymentResourceUsage[]; timestamp: number; }; } export interface IReq_Any_Cloudly_ReconcileNodeBaseServices extends plugins.typedrequestInterfaces.implementsTR { method: 'reconcileNodeBaseServices'; request: { identity: IIdentity; nodeId: string; }; response: { nodeId: string; nodeName: string; success: boolean; message?: string; }; } /** * Cloudly asks a node's coreflow for live per-deployment resource usage. */ export interface IReq_Cloudly_Coreflow_GetNodeResourceUsage extends plugins.typedrequestInterfaces.implementsTR { method: 'coreflowGetNodeResourceUsage'; request: {}; response: { deployments: INodeDeploymentResourceUsage[]; timestamp: number; }; } /** * Cloudly -> admin UIs: live node metrics relay (1s cadence, not persisted). */ export interface IReq_Cloudly_Any_PushNodeMetricsSample extends plugins.typedrequestInterfaces.implementsTR { method: 'pushNodeMetricsSample'; request: { nodeId: string; sample: INodeMetricsSample; }; response: Record; } /** * Cloudly -> admin UIs: node action lifecycle updates. */ export interface IReq_Cloudly_Any_PushNodeActionUpdate extends plugins.typedrequestInterfaces.implementsTR { method: 'pushNodeActionUpdate'; request: { action: INodeAction; }; response: Record; } export interface IReq_Cloudly_Any_PushNodeRuntimeUpdate extends plugins.typedrequestInterfaces.implementsTR { method: 'pushNodeRuntimeUpdate'; request: { node: IClusterNode; }; response: Record; }