mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-07-09 16:00:59 +00:00
1748 lines
93 KiB
Go
1748 lines
93 KiB
Go
package unifiedresources
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/models"
|
|
"github.com/rcourtman/pulse-go-rewrite/internal/storagehealth"
|
|
)
|
|
|
|
// Resource represents a unified resource aggregated across multiple data sources.
|
|
type Resource struct {
|
|
ID string `json:"id"`
|
|
Type ResourceType `json:"type"`
|
|
Technology string `json:"technology,omitempty"`
|
|
Name string `json:"name"`
|
|
Status ResourceStatus `json:"status"`
|
|
LastSeen time.Time `json:"lastSeen"`
|
|
UpdatedAt time.Time `json:"updatedAt,omitempty"`
|
|
|
|
DiscoveryTarget *DiscoveryTarget `json:"discoveryTarget,omitempty"`
|
|
DiscoveryReadiness *ResourceDiscoveryReadiness `json:"discoveryReadiness,omitempty"`
|
|
MetricsTarget *MetricsTarget `json:"metricsTarget,omitempty"`
|
|
Canonical *CanonicalIdentity `json:"canonicalIdentity,omitempty"`
|
|
Policy *ResourcePolicy `json:"policy,omitempty"`
|
|
AISafeSummary string `json:"aiSafeSummary,omitempty"`
|
|
PlatformScopes []string `json:"platformScopes,omitempty"`
|
|
|
|
Sources []DataSource `json:"sources"`
|
|
SourceStatus map[DataSource]SourceStatus `json:"sourceStatus,omitempty"`
|
|
|
|
Identity ResourceIdentity `json:"identity,omitempty"`
|
|
Metrics *ResourceMetrics `json:"metrics,omitempty"`
|
|
|
|
// Surface-friendly projections of the nested source payloads that the
|
|
// frontend infrastructure table reads directly. Adapters that wrap an
|
|
// `AgentData` (Pulse-managed host) or `ProxmoxData` (Proxmox node)
|
|
// project the runtime uptime and the max-sensor temperature here so
|
|
// the canonical table renders real values instead of dashes for
|
|
// agent-backed rows. Resources that have no native uptime/temperature
|
|
// concept (e.g. k8s-deployment, docker-service) leave these unset.
|
|
Uptime int64 `json:"uptime,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"`
|
|
|
|
ParentID *string `json:"parentId,omitempty"`
|
|
ParentName string `json:"parentName,omitempty"`
|
|
ChildCount int `json:"childCount,omitempty"`
|
|
parentBySource map[DataSource]string
|
|
|
|
Tags []string `json:"tags,omitempty"`
|
|
CustomURL string `json:"customUrl,omitempty"`
|
|
Capabilities []ResourceCapability `json:"capabilities,omitempty"`
|
|
Relationships []ResourceRelationship `json:"relationships,omitempty"`
|
|
RecentChanges []ResourceChange `json:"recentChanges,omitempty"`
|
|
FacetCounts ResourceFacetCounts `json:"facetCounts,omitempty"`
|
|
Incidents []ResourceIncident `json:"incidents,omitempty"`
|
|
IncidentCount int `json:"incidentCount,omitempty"`
|
|
IncidentCode string `json:"incidentCode,omitempty"`
|
|
IncidentSeverity storagehealth.RiskLevel `json:"incidentSeverity,omitempty"`
|
|
IncidentSummary string `json:"incidentSummary,omitempty"`
|
|
IncidentCategory string `json:"incidentCategory,omitempty"`
|
|
IncidentLabel string `json:"incidentLabel,omitempty"`
|
|
IncidentPriority int `json:"incidentPriority,omitempty"`
|
|
IncidentImpactSummary string `json:"incidentImpactSummary,omitempty"`
|
|
IncidentUrgency string `json:"incidentUrgency,omitempty"`
|
|
IncidentAction string `json:"incidentAction,omitempty"`
|
|
|
|
// Source-specific payloads
|
|
Proxmox *ProxmoxData `json:"proxmox,omitempty"`
|
|
Storage *StorageMeta `json:"storage,omitempty"`
|
|
Agent *AgentData `json:"agent,omitempty"`
|
|
Docker *DockerData `json:"docker,omitempty"`
|
|
PBS *PBSData `json:"pbs,omitempty"`
|
|
PMG *PMGData `json:"pmg,omitempty"`
|
|
Kubernetes *K8sData `json:"kubernetes,omitempty"`
|
|
PhysicalDisk *PhysicalDiskMeta `json:"physicalDisk,omitempty"`
|
|
Ceph *CephMeta `json:"ceph,omitempty"`
|
|
TrueNAS *TrueNASData `json:"truenas,omitempty"`
|
|
VMware *VMwareData `json:"vmware,omitempty"`
|
|
Availability *AvailabilityData `json:"availability,omitempty"`
|
|
}
|
|
|
|
// ResourceFacetCounts captures the total count of each resource facet that
|
|
// may be surfaced in row summaries or detail drawers.
|
|
type ResourceFacetCounts struct {
|
|
RecentChanges int `json:"recentChanges"`
|
|
RecentChangeKinds map[ChangeKind]int `json:"recentChangeKinds,omitempty"`
|
|
RecentChangeSourceTypes map[ChangeSourceType]int `json:"recentChangeSourceTypes,omitempty"`
|
|
RecentChangeSourceAdapters map[ChangeSourceAdapter]int `json:"recentChangeSourceAdapters,omitempty"`
|
|
}
|
|
|
|
// DiscoveryTarget describes the canonical discovery request coordinates
|
|
// for this unified resource.
|
|
type DiscoveryTarget struct {
|
|
ResourceType string `json:"resourceType"`
|
|
AgentID string `json:"agentId"`
|
|
ResourceID string `json:"resourceId"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
}
|
|
|
|
// ResourceDiscoveryReadiness summarizes whether service discovery has useful,
|
|
// recent grounding for a resource. It is intentionally metadata-only: raw
|
|
// command output, environment variables, config files, and secrets do not
|
|
// belong in this projection.
|
|
type ResourceDiscoveryReadiness struct {
|
|
State ResourceDiscoveryReadinessState `json:"state"`
|
|
Reason string `json:"reason,omitempty"`
|
|
Source string `json:"source,omitempty"`
|
|
ResourceType string `json:"resourceType,omitempty"`
|
|
TargetID string `json:"targetId,omitempty"`
|
|
ResourceID string `json:"resourceId,omitempty"`
|
|
DiscoveryID string `json:"discoveryId,omitempty"`
|
|
ObservedAt *time.Time `json:"observedAt,omitempty"`
|
|
GeneratedAt time.Time `json:"generatedAt"`
|
|
AgeSeconds int64 `json:"ageSeconds,omitempty"`
|
|
StaleAfterSeconds int64 `json:"staleAfterSeconds,omitempty"`
|
|
FactCount int `json:"factCount,omitempty"`
|
|
ServiceName string `json:"serviceName,omitempty"`
|
|
ServiceCategory string `json:"serviceCategory,omitempty"`
|
|
Confidence float64 `json:"confidence,omitempty"`
|
|
}
|
|
|
|
// ResourceDiscoveryReadinessState is the canonical state vocabulary shared by
|
|
// API payloads, Assistant handoffs, and frontend badges.
|
|
type ResourceDiscoveryReadinessState string
|
|
|
|
const (
|
|
ResourceDiscoveryReadinessFresh ResourceDiscoveryReadinessState = "fresh"
|
|
ResourceDiscoveryReadinessStale ResourceDiscoveryReadinessState = "stale"
|
|
ResourceDiscoveryReadinessMissing ResourceDiscoveryReadinessState = "missing"
|
|
ResourceDiscoveryReadinessRunning ResourceDiscoveryReadinessState = "running"
|
|
ResourceDiscoveryReadinessFailed ResourceDiscoveryReadinessState = "failed"
|
|
ResourceDiscoveryReadinessUnavailable ResourceDiscoveryReadinessState = "unavailable"
|
|
ResourceDiscoveryReadinessUnsupported ResourceDiscoveryReadinessState = "unsupported"
|
|
)
|
|
|
|
// MetricsTarget describes the resource type and ID to use when querying
|
|
// the metrics history endpoint for this unified resource.
|
|
type MetricsTarget struct {
|
|
ResourceType string `json:"resourceType"`
|
|
ResourceID string `json:"resourceId"`
|
|
}
|
|
|
|
// CanonicalIdentity describes the backend-chosen identity contract for a
|
|
// unified resource so frontend surfaces do not need to reconstruct labels and
|
|
// host hints from source-specific facets.
|
|
type CanonicalIdentity struct {
|
|
DisplayName string `json:"displayName,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
PlatformID string `json:"platformId,omitempty"`
|
|
PrimaryID string `json:"primaryId,omitempty"`
|
|
Aliases []string `json:"aliases,omitempty"`
|
|
}
|
|
|
|
// ResourceType represents the kind of resource.
|
|
type ResourceType string
|
|
|
|
const (
|
|
// ResourceTypeAgent is the canonical v6 infrastructure parent type.
|
|
ResourceTypeAgent ResourceType = "agent"
|
|
ResourceTypeVM ResourceType = "vm"
|
|
ResourceTypeSystemContainer ResourceType = "system-container"
|
|
ResourceTypeAppContainer ResourceType = "app-container"
|
|
ResourceTypeDockerService ResourceType = "docker-service"
|
|
ResourceTypeDockerImage ResourceType = "docker-image"
|
|
ResourceTypeDockerVolume ResourceType = "docker-volume"
|
|
ResourceTypeDockerNetwork ResourceType = "docker-network"
|
|
ResourceTypeDockerTask ResourceType = "docker-task"
|
|
ResourceTypeDockerSwarmNode ResourceType = "docker-swarm-node"
|
|
ResourceTypeDockerSecret ResourceType = "docker-secret"
|
|
ResourceTypeDockerConfig ResourceType = "docker-config"
|
|
ResourceTypeK8sCluster ResourceType = "k8s-cluster"
|
|
ResourceTypeK8sNode ResourceType = "k8s-node"
|
|
ResourceTypePod ResourceType = "pod"
|
|
ResourceTypeK8sDeployment ResourceType = "k8s-deployment"
|
|
ResourceTypeK8sReplicaSet ResourceType = "k8s-replicaset"
|
|
ResourceTypeK8sNamespace ResourceType = "k8s-namespace"
|
|
ResourceTypeK8sService ResourceType = "k8s-service"
|
|
ResourceTypeK8sStatefulSet ResourceType = "k8s-statefulset"
|
|
ResourceTypeK8sDaemonSet ResourceType = "k8s-daemonset"
|
|
ResourceTypeK8sJob ResourceType = "k8s-job"
|
|
ResourceTypeK8sCronJob ResourceType = "k8s-cronjob"
|
|
ResourceTypeK8sIngress ResourceType = "k8s-ingress"
|
|
ResourceTypeK8sEndpointSlice ResourceType = "k8s-endpoint-slice"
|
|
ResourceTypeK8sNetworkPolicy ResourceType = "k8s-network-policy"
|
|
ResourceTypeK8sPV ResourceType = "k8s-persistent-volume"
|
|
ResourceTypeK8sPVC ResourceType = "k8s-persistent-volume-claim"
|
|
ResourceTypeK8sStorageClass ResourceType = "k8s-storage-class"
|
|
ResourceTypeK8sConfigMap ResourceType = "k8s-configmap"
|
|
ResourceTypeK8sSecret ResourceType = "k8s-secret"
|
|
ResourceTypeK8sServiceAccount ResourceType = "k8s-serviceaccount"
|
|
ResourceTypeK8sRole ResourceType = "k8s-role"
|
|
ResourceTypeK8sClusterRole ResourceType = "k8s-cluster-role"
|
|
ResourceTypeK8sRoleBinding ResourceType = "k8s-role-binding"
|
|
ResourceTypeK8sClusterRoleBinding ResourceType = "k8s-cluster-role-binding"
|
|
ResourceTypeK8sResourceQuota ResourceType = "k8s-resource-quota"
|
|
ResourceTypeK8sLimitRange ResourceType = "k8s-limit-range"
|
|
ResourceTypeK8sPDB ResourceType = "k8s-pod-disruption-budget"
|
|
ResourceTypeK8sHPA ResourceType = "k8s-horizontal-pod-autoscaler"
|
|
ResourceTypeK8sEvent ResourceType = "k8s-event"
|
|
ResourceTypeStorage ResourceType = "storage"
|
|
ResourceTypeNetwork ResourceType = "network"
|
|
ResourceTypePBS ResourceType = "pbs"
|
|
ResourceTypePMG ResourceType = "pmg"
|
|
ResourceTypeCeph ResourceType = "ceph"
|
|
ResourceTypePhysicalDisk ResourceType = "physical_disk"
|
|
ResourceTypeNetworkShare ResourceType = "network-share"
|
|
ResourceTypeNetworkEndpoint ResourceType = "network-endpoint"
|
|
)
|
|
|
|
// CanonicalResourceType normalizes resource type spellings into the internal
|
|
// canonical enum value.
|
|
func CanonicalResourceType(rt ResourceType) ResourceType {
|
|
normalized := ResourceType(strings.ToLower(strings.TrimSpace(string(rt))))
|
|
return normalized
|
|
}
|
|
|
|
// ContractResourceType maps an internal unified resource onto the canonical
|
|
// external transport type used by REST and websocket/state payloads.
|
|
func ContractResourceType(resource Resource) ResourceType {
|
|
switch CanonicalResourceType(resource.Type) {
|
|
case ResourceTypeAgent:
|
|
if resource.Proxmox != nil || resource.Agent != nil || resource.TrueNAS != nil || resource.VMware != nil {
|
|
return ResourceTypeAgent
|
|
}
|
|
if resource.Docker != nil {
|
|
return ResourceType("docker-host")
|
|
}
|
|
return ResourceTypeAgent
|
|
case ResourceTypeSystemContainer:
|
|
return ResourceTypeSystemContainer
|
|
case ResourceTypeAppContainer:
|
|
return ResourceTypeAppContainer
|
|
default:
|
|
return CanonicalResourceType(resource.Type)
|
|
}
|
|
}
|
|
|
|
// ResourceStatus represents the high-level status of a resource.
|
|
type ResourceStatus string
|
|
|
|
const (
|
|
StatusOnline ResourceStatus = "online"
|
|
StatusOffline ResourceStatus = "offline"
|
|
StatusWarning ResourceStatus = "warning"
|
|
StatusUnknown ResourceStatus = "unknown"
|
|
)
|
|
|
|
// DataSource represents a contributing data source.
|
|
type DataSource string
|
|
|
|
const (
|
|
SourceProxmox DataSource = "proxmox"
|
|
SourceAgent DataSource = "agent"
|
|
SourceDocker DataSource = "docker"
|
|
SourcePBS DataSource = "pbs"
|
|
SourcePMG DataSource = "pmg"
|
|
SourceK8s DataSource = "kubernetes"
|
|
SourceTrueNAS DataSource = "truenas"
|
|
SourceVMware DataSource = "vmware"
|
|
SourceAvailability DataSource = "availability"
|
|
)
|
|
|
|
// SourceStatus describes the freshness of data from a source.
|
|
type SourceStatus struct {
|
|
Status string `json:"status"` // online, stale, offline
|
|
LastSeen time.Time `json:"lastSeen"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
// ResourceIdentity holds identifiers used for matching.
|
|
type ResourceIdentity struct {
|
|
MachineID string `json:"machineId,omitempty"`
|
|
DMIUUID string `json:"dmiUuid,omitempty"`
|
|
Hostnames []string `json:"hostnames,omitempty"`
|
|
IPAddresses []string `json:"ipAddresses,omitempty"`
|
|
MACAddresses []string `json:"macAddresses,omitempty"`
|
|
ClusterName string `json:"clusterName,omitempty"`
|
|
}
|
|
|
|
// MatchResult describes a potential identity match.
|
|
type MatchResult struct {
|
|
ResourceA string `json:"resourceA"`
|
|
ResourceB string `json:"resourceB"`
|
|
Confidence float64 `json:"confidence"`
|
|
MatchReason string `json:"matchReason"`
|
|
RequiresReview bool `json:"requiresReview"`
|
|
}
|
|
|
|
// SourceTarget describes a source-specific mapping for a unified resource.
|
|
type SourceTarget struct {
|
|
Source DataSource `json:"source"`
|
|
SourceID string `json:"sourceId"`
|
|
CandidateID string `json:"candidateId"`
|
|
}
|
|
|
|
// ResourceMetrics contains unified metrics derived from available sources.
|
|
type ResourceMetrics struct {
|
|
CPU *MetricValue `json:"cpu,omitempty"`
|
|
Memory *MetricValue `json:"memory,omitempty"`
|
|
Disk *MetricValue `json:"disk,omitempty"`
|
|
NetIn *MetricValue `json:"netIn,omitempty"`
|
|
NetOut *MetricValue `json:"netOut,omitempty"`
|
|
DiskRead *MetricValue `json:"diskRead,omitempty"`
|
|
DiskWrite *MetricValue `json:"diskWrite,omitempty"`
|
|
}
|
|
|
|
// MetricValue represents a metric value, optionally with totals.
|
|
type MetricValue struct {
|
|
Value float64 `json:"value,omitempty"`
|
|
Used *int64 `json:"used,omitempty"`
|
|
Total *int64 `json:"total,omitempty"`
|
|
Percent float64 `json:"percent,omitempty"`
|
|
Unit string `json:"unit,omitempty"`
|
|
Source DataSource `json:"-"`
|
|
}
|
|
|
|
// ProxmoxData contains Proxmox-specific data for a resource.
|
|
type ProxmoxData struct {
|
|
SourceID string `json:"sourceId,omitempty"` // raw model ID from source snapshot
|
|
NodeName string `json:"nodeName,omitempty"`
|
|
Pool string `json:"pool,omitempty"`
|
|
ClusterName string `json:"clusterName,omitempty"`
|
|
IsClusterMember bool `json:"isClusterMember,omitempty"`
|
|
Instance string `json:"instance,omitempty"`
|
|
HostURL string `json:"host,omitempty"`
|
|
GuestURL string `json:"guestUrl,omitempty"`
|
|
ConnectionHealth string `json:"connectionHealth,omitempty"`
|
|
VMID int `json:"vmid,omitempty"`
|
|
ContainerType string `json:"containerType,omitempty"`
|
|
IsOCI bool `json:"isOci,omitempty"`
|
|
CPUs int `json:"cpus,omitempty"`
|
|
Template bool `json:"template,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"` // Max node CPU temp in Celsius
|
|
TemperatureDetails *models.Temperature `json:"temperatureDetails,omitempty"`
|
|
PVEVersion string `json:"pveVersion,omitempty"`
|
|
KernelVersion string `json:"kernelVersion,omitempty"`
|
|
Uptime int64 `json:"uptime,omitempty"`
|
|
LastBackup time.Time `json:"lastBackup,omitempty"`
|
|
DiskStatusReason string `json:"diskStatusReason,omitempty"`
|
|
OSName string `json:"osName,omitempty"`
|
|
OSVersion string `json:"osVersion,omitempty"`
|
|
AgentVersion string `json:"agentVersion,omitempty"`
|
|
NetworkInterfaces []NetworkInterface `json:"networkInterfaces,omitempty"`
|
|
OSTemplate string `json:"osTemplate,omitempty"`
|
|
HasDocker bool `json:"hasDocker,omitempty"`
|
|
DockerCheckedAt *time.Time `json:"dockerCheckedAt,omitempty"`
|
|
CPUInfo *CPUInfo `json:"cpuInfo,omitempty"`
|
|
LoadAverage []float64 `json:"loadAverage,omitempty"`
|
|
PendingUpdates int `json:"pendingUpdates,omitempty"`
|
|
TemperatureMonitoringEnabled *bool `json:"temperatureMonitoringEnabled,omitempty"`
|
|
PendingUpdatesCheckedAt *time.Time `json:"pendingUpdatesCheckedAt,omitempty"`
|
|
Disks []DiskInfo `json:"disks,omitempty"`
|
|
SwapUsed int64 `json:"swapUsed,omitempty"`
|
|
SwapTotal int64 `json:"swapTotal,omitempty"`
|
|
Balloon int64 `json:"balloon,omitempty"`
|
|
Lock string `json:"lock,omitempty"` // Proxmox lock state (e.g. "backup", "migrate", "snapshot")
|
|
// Internal link hint to a host agent resource.
|
|
LinkedAgentID string `json:"-"`
|
|
}
|
|
|
|
// StorageMeta contains storage-specific metadata for storage resources.
|
|
type StorageMeta struct {
|
|
Type string `json:"type,omitempty"`
|
|
Content string `json:"content,omitempty"`
|
|
ContentTypes []string `json:"contentTypes,omitempty"`
|
|
Shared bool `json:"shared"`
|
|
Enabled bool `json:"enabled"`
|
|
Active bool `json:"active"`
|
|
IsCeph bool `json:"isCeph"`
|
|
IsZFS bool `json:"isZfs"`
|
|
Platform string `json:"platform,omitempty"`
|
|
Topology string `json:"topology,omitempty"`
|
|
Protection string `json:"protection,omitempty"`
|
|
Risk *StorageRisk `json:"risk,omitempty"`
|
|
RiskSummary string `json:"riskSummary,omitempty"`
|
|
ConsumerCount int `json:"consumerCount,omitempty"`
|
|
ConsumerTypes []string `json:"consumerTypes,omitempty"`
|
|
TopConsumers []StorageConsumerMeta `json:"topConsumers,omitempty"`
|
|
ConsumerImpactSummary string `json:"consumerImpactSummary,omitempty"`
|
|
PostureSummary string `json:"postureSummary,omitempty"`
|
|
ProtectionReduced bool `json:"protectionReduced,omitempty"`
|
|
ProtectionSummary string `json:"protectionSummary,omitempty"`
|
|
RebuildInProgress bool `json:"rebuildInProgress,omitempty"`
|
|
RebuildSummary string `json:"rebuildSummary,omitempty"`
|
|
|
|
// Accessibility metadata.
|
|
Nodes []string `json:"nodes,omitempty"` // PVE nodes where this storage is accessible
|
|
Pool string `json:"pool,omitempty"` // Proxmox backing pool/dataset (for example rpool/data)
|
|
Path string `json:"path,omitempty"` // local mount path on the node
|
|
|
|
// ZFS metadata (when IsZFS is true and the source provides details).
|
|
ZFSPoolState string `json:"zfsPoolState,omitempty"`
|
|
ZFSReadErrors int64 `json:"zfsReadErrors,omitempty"`
|
|
ZFSWriteErrors int64 `json:"zfsWriteErrors,omitempty"`
|
|
ZFSChecksumErrors int64 `json:"zfsChecksumErrors,omitempty"`
|
|
|
|
// Unraid metadata (when Platform is "unraid").
|
|
ArrayState string `json:"arrayState,omitempty"`
|
|
SyncAction string `json:"syncAction,omitempty"`
|
|
SyncProgress float64 `json:"syncProgress,omitempty"`
|
|
NumProtected int `json:"numProtected,omitempty"`
|
|
NumDisabled int `json:"numDisabled,omitempty"`
|
|
NumInvalid int `json:"numInvalid,omitempty"`
|
|
NumMissing int `json:"numMissing,omitempty"`
|
|
}
|
|
|
|
type StorageConsumerMeta struct {
|
|
ResourceID string `json:"resourceId,omitempty"`
|
|
ResourceType ResourceType `json:"resourceType"`
|
|
Name string `json:"name"`
|
|
DiskCount int `json:"diskCount,omitempty"`
|
|
}
|
|
|
|
type ResourceIncident struct {
|
|
Provider string `json:"provider,omitempty"`
|
|
NativeID string `json:"nativeId,omitempty"`
|
|
Code string `json:"code"`
|
|
Severity storagehealth.RiskLevel `json:"severity"`
|
|
Source string `json:"source,omitempty"`
|
|
Summary string `json:"summary"`
|
|
StartedAt time.Time `json:"startedAt,omitempty"`
|
|
}
|
|
|
|
// PhysicalDiskMeta contains physical disk-specific metadata.
|
|
type PhysicalDiskMeta struct {
|
|
DevPath string `json:"devPath"`
|
|
Model string `json:"model,omitempty"`
|
|
Serial string `json:"serial,omitempty"`
|
|
WWN string `json:"wwn,omitempty"`
|
|
DiskType string `json:"diskType"` // nvme, sata, sas
|
|
SizeBytes int64 `json:"sizeBytes"`
|
|
Health string `json:"health"` // PASSED, FAILED, UNKNOWN
|
|
Wearout int `json:"wearout"` // 0-100, -1 unavailable
|
|
Temperature int `json:"temperature"` // Celsius
|
|
TemperatureAggregate *TemperatureAggregateMeta `json:"temperatureAggregate,omitempty"`
|
|
RPM int `json:"rpm"`
|
|
Used string `json:"used,omitempty"`
|
|
StorageRole string `json:"storageRole,omitempty"`
|
|
StorageGroup string `json:"storageGroup,omitempty"`
|
|
StorageState string `json:"storageState,omitempty"`
|
|
SpunDown bool `json:"spunDown,omitempty"`
|
|
ReadCount int64 `json:"readCount,omitempty"`
|
|
WriteCount int64 `json:"writeCount,omitempty"`
|
|
ErrorCount int64 `json:"errorCount,omitempty"`
|
|
SMART *SMARTMeta `json:"smart,omitempty"`
|
|
Risk *PhysicalDiskRisk `json:"risk,omitempty"`
|
|
}
|
|
|
|
// TemperatureAggregateMeta stores recent aggregate temperature history for a
|
|
// resource sensor where the provider can supply min/avg/max readings.
|
|
type TemperatureAggregateMeta struct {
|
|
WindowDays int `json:"windowDays,omitempty"`
|
|
MinCelsius float64 `json:"minCelsius,omitempty"`
|
|
AvgCelsius float64 `json:"avgCelsius,omitempty"`
|
|
MaxCelsius float64 `json:"maxCelsius,omitempty"`
|
|
}
|
|
|
|
type StorageRisk struct {
|
|
Level storagehealth.RiskLevel `json:"level"`
|
|
Reasons []StorageRiskReason `json:"reasons,omitempty"`
|
|
}
|
|
|
|
type StorageRiskReason struct {
|
|
Code string `json:"code"`
|
|
Severity storagehealth.RiskLevel `json:"severity"`
|
|
Summary string `json:"summary"`
|
|
}
|
|
|
|
type PhysicalDiskRisk struct {
|
|
Level storagehealth.RiskLevel `json:"level"`
|
|
Reasons []PhysicalDiskRiskReason `json:"reasons,omitempty"`
|
|
}
|
|
|
|
type PhysicalDiskRiskReason struct {
|
|
Code string `json:"code"`
|
|
Severity storagehealth.RiskLevel `json:"severity"`
|
|
Summary string `json:"summary"`
|
|
}
|
|
|
|
// CephMeta contains Ceph cluster-specific metadata.
|
|
type CephMeta struct {
|
|
FSID string `json:"fsid,omitempty"`
|
|
HealthStatus string `json:"healthStatus"`
|
|
HealthMessage string `json:"healthMessage,omitempty"`
|
|
NumMons int `json:"numMons"`
|
|
NumMgrs int `json:"numMgrs"`
|
|
NumOSDs int `json:"numOsds"`
|
|
NumOSDsUp int `json:"numOsdsUp"`
|
|
NumOSDsIn int `json:"numOsdsIn"`
|
|
NumPGs int `json:"numPGs"`
|
|
Pools []CephPoolMeta `json:"pools,omitempty"`
|
|
Services []CephServiceMeta `json:"services,omitempty"`
|
|
}
|
|
|
|
// CephPoolMeta describes a Ceph storage pool.
|
|
type CephPoolMeta struct {
|
|
Name string `json:"name"`
|
|
StoredBytes int64 `json:"storedBytes"`
|
|
AvailableBytes int64 `json:"availableBytes"`
|
|
Objects int64 `json:"objects"`
|
|
PercentUsed float64 `json:"percentUsed"`
|
|
}
|
|
|
|
// CephServiceMeta describes a Ceph daemon service.
|
|
type CephServiceMeta struct {
|
|
Type string `json:"type"`
|
|
Running int `json:"running"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
// SMARTMeta contains SMART attribute data for a physical disk.
|
|
type SMARTMeta struct {
|
|
PowerOnHours int64 `json:"powerOnHours,omitempty"`
|
|
PowerCycles int64 `json:"powerCycles,omitempty"`
|
|
ReallocatedSectors int64 `json:"reallocatedSectors,omitempty"`
|
|
PendingSectors int64 `json:"pendingSectors,omitempty"`
|
|
OfflineUncorrectable int64 `json:"offlineUncorrectable,omitempty"`
|
|
UDMACRCErrors int64 `json:"udmaCrcErrors,omitempty"`
|
|
PercentageUsed int `json:"percentageUsed,omitempty"`
|
|
AvailableSpare int `json:"availableSpare,omitempty"`
|
|
MediaErrors int64 `json:"mediaErrors,omitempty"`
|
|
UnsafeShutdowns int64 `json:"unsafeShutdowns,omitempty"`
|
|
}
|
|
|
|
// HostSensorMeta contains host sensor readings.
|
|
type HostSensorMeta struct {
|
|
TemperatureCelsius map[string]float64 `json:"temperatureCelsius,omitempty"`
|
|
FanRPM map[string]float64 `json:"fanRpm,omitempty"`
|
|
Additional map[string]float64 `json:"additional,omitempty"`
|
|
SMART []HostSMARTMeta `json:"smart,omitempty"`
|
|
}
|
|
|
|
// HostSMARTMeta describes a disk's SMART data.
|
|
type HostSMARTMeta struct {
|
|
Device string `json:"device"`
|
|
Model string `json:"model,omitempty"`
|
|
Serial string `json:"serial,omitempty"`
|
|
WWN string `json:"wwn,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
Temperature int `json:"temperature"`
|
|
Health string `json:"health"`
|
|
Standby bool `json:"standby,omitempty"`
|
|
Pool string `json:"pool,omitempty"`
|
|
Attributes *models.SMARTAttributes `json:"attributes,omitempty"`
|
|
}
|
|
|
|
// HostRAIDDeviceMeta describes a device in a RAID array.
|
|
type HostRAIDDeviceMeta struct {
|
|
Device string `json:"device"`
|
|
State string `json:"state"`
|
|
Slot int `json:"slot"`
|
|
}
|
|
|
|
// HostRAIDMeta describes a RAID array.
|
|
type HostRAIDMeta struct {
|
|
Device string `json:"device"`
|
|
Name string `json:"name,omitempty"`
|
|
Level string `json:"level"`
|
|
State string `json:"state"`
|
|
TotalDevices int `json:"totalDevices"`
|
|
ActiveDevices int `json:"activeDevices"`
|
|
WorkingDevices int `json:"workingDevices"`
|
|
FailedDevices int `json:"failedDevices"`
|
|
SpareDevices int `json:"spareDevices"`
|
|
UUID string `json:"uuid,omitempty"`
|
|
Devices []HostRAIDDeviceMeta `json:"devices,omitempty"`
|
|
RebuildPercent float64 `json:"rebuildPercent,omitempty"`
|
|
RebuildSpeed string `json:"rebuildSpeed,omitempty"`
|
|
Operation string `json:"operation,omitempty"`
|
|
Risk *StorageRisk `json:"risk,omitempty"`
|
|
}
|
|
|
|
// HostUnraidDiskMeta describes a disk's role and state inside an Unraid array.
|
|
type HostUnraidDiskMeta struct {
|
|
Name string `json:"name"`
|
|
Device string `json:"device,omitempty"`
|
|
Role string `json:"role,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
RawStatus string `json:"rawStatus,omitempty"`
|
|
Model string `json:"model,omitempty"`
|
|
Serial string `json:"serial,omitempty"`
|
|
Filesystem string `json:"filesystem,omitempty"`
|
|
Transport string `json:"transport,omitempty"`
|
|
SizeBytes int64 `json:"sizeBytes,omitempty"`
|
|
UsedBytes int64 `json:"usedBytes,omitempty"`
|
|
FreeBytes int64 `json:"freeBytes,omitempty"`
|
|
Temperature int `json:"temperature,omitempty"`
|
|
SpunDown bool `json:"spunDown,omitempty"`
|
|
ReadCount int64 `json:"readCount,omitempty"`
|
|
WriteCount int64 `json:"writeCount,omitempty"`
|
|
ErrorCount int64 `json:"errorCount,omitempty"`
|
|
Slot int `json:"slot,omitempty"`
|
|
}
|
|
|
|
// HostUnraidMeta describes Unraid array topology from a host agent.
|
|
type HostUnraidMeta struct {
|
|
ArrayStarted bool `json:"arrayStarted"`
|
|
ArrayState string `json:"arrayState,omitempty"`
|
|
SyncAction string `json:"syncAction,omitempty"`
|
|
SyncProgress float64 `json:"syncProgress,omitempty"`
|
|
SyncErrors int64 `json:"syncErrors,omitempty"`
|
|
NumProtected int `json:"numProtected,omitempty"`
|
|
NumDisabled int `json:"numDisabled,omitempty"`
|
|
NumInvalid int `json:"numInvalid,omitempty"`
|
|
NumMissing int `json:"numMissing,omitempty"`
|
|
Disks []HostUnraidDiskMeta `json:"disks,omitempty"`
|
|
Risk *StorageRisk `json:"risk,omitempty"`
|
|
RiskSummary string `json:"riskSummary,omitempty"`
|
|
PostureSummary string `json:"postureSummary,omitempty"`
|
|
ProtectionReduced bool `json:"protectionReduced,omitempty"`
|
|
ProtectionSummary string `json:"protectionSummary,omitempty"`
|
|
RebuildInProgress bool `json:"rebuildInProgress,omitempty"`
|
|
RebuildSummary string `json:"rebuildSummary,omitempty"`
|
|
}
|
|
|
|
// HostDiskIOMeta describes disk I/O counters.
|
|
type HostDiskIOMeta struct {
|
|
Device string `json:"device"`
|
|
ReadBytes uint64 `json:"readBytes"`
|
|
WriteBytes uint64 `json:"writeBytes"`
|
|
ReadOps uint64 `json:"readOps"`
|
|
WriteOps uint64 `json:"writeOps"`
|
|
IOTimeMs uint64 `json:"ioTimeMs,omitempty"`
|
|
}
|
|
|
|
// HostCephCheckMeta represents a health check detail.
|
|
type HostCephCheckMeta struct {
|
|
Severity string `json:"severity"`
|
|
Message string `json:"message,omitempty"`
|
|
Detail []string `json:"detail,omitempty"`
|
|
}
|
|
|
|
// HostCephHealthSummaryMeta represents a health summary message.
|
|
type HostCephHealthSummaryMeta struct {
|
|
Severity string `json:"severity"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// HostCephHealthMeta represents Ceph cluster health status.
|
|
type HostCephHealthMeta struct {
|
|
Status string `json:"status"`
|
|
Checks map[string]HostCephCheckMeta `json:"checks,omitempty"`
|
|
Summary []HostCephHealthSummaryMeta `json:"summary,omitempty"`
|
|
}
|
|
|
|
// HostCephMonitorMeta represents a single Ceph monitor.
|
|
type HostCephMonitorMeta struct {
|
|
Name string `json:"name"`
|
|
Rank int `json:"rank"`
|
|
Addr string `json:"addr,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
}
|
|
|
|
// HostCephMonitorMapMeta represents Ceph monitor information.
|
|
type HostCephMonitorMapMeta struct {
|
|
Epoch int `json:"epoch"`
|
|
NumMons int `json:"numMons"`
|
|
Monitors []HostCephMonitorMeta `json:"monitors,omitempty"`
|
|
}
|
|
|
|
// HostCephManagerMapMeta represents Ceph manager information.
|
|
type HostCephManagerMapMeta struct {
|
|
Available bool `json:"available"`
|
|
NumMgrs int `json:"numMgrs"`
|
|
ActiveMgr string `json:"activeMgr,omitempty"`
|
|
Standbys int `json:"standbys"`
|
|
}
|
|
|
|
// HostCephOSDMapMeta represents OSD status summary.
|
|
type HostCephOSDMapMeta struct {
|
|
Epoch int `json:"epoch"`
|
|
NumOSDs int `json:"numOsds"`
|
|
NumUp int `json:"numUp"`
|
|
NumIn int `json:"numIn"`
|
|
NumDown int `json:"numDown,omitempty"`
|
|
NumOut int `json:"numOut,omitempty"`
|
|
}
|
|
|
|
// HostCephPGMapMeta represents placement group statistics.
|
|
type HostCephPGMapMeta struct {
|
|
NumPGs int `json:"numPgs"`
|
|
BytesTotal uint64 `json:"bytesTotal"`
|
|
BytesUsed uint64 `json:"bytesUsed"`
|
|
BytesAvailable uint64 `json:"bytesAvailable"`
|
|
DataBytes uint64 `json:"dataBytes,omitempty"`
|
|
UsagePercent float64 `json:"usagePercent"`
|
|
DegradedRatio float64 `json:"degradedRatio,omitempty"`
|
|
MisplacedRatio float64 `json:"misplacedRatio,omitempty"`
|
|
ReadBytesPerSec uint64 `json:"readBytesPerSec,omitempty"`
|
|
WriteBytesPerSec uint64 `json:"writeBytesPerSec,omitempty"`
|
|
ReadOpsPerSec uint64 `json:"readOpsPerSec,omitempty"`
|
|
WriteOpsPerSec uint64 `json:"writeOpsPerSec,omitempty"`
|
|
}
|
|
|
|
// HostCephPoolMeta represents a Ceph pool.
|
|
type HostCephPoolMeta struct {
|
|
ID int `json:"id"`
|
|
Name string `json:"name"`
|
|
BytesUsed uint64 `json:"bytesUsed"`
|
|
BytesAvailable uint64 `json:"bytesAvailable"`
|
|
Objects uint64 `json:"objects"`
|
|
PercentUsed float64 `json:"percentUsed"`
|
|
}
|
|
|
|
// HostCephServiceMeta represents a Ceph service summary.
|
|
type HostCephServiceMeta struct {
|
|
Type string `json:"type"`
|
|
Running int `json:"running"`
|
|
Total int `json:"total"`
|
|
Daemons []string `json:"daemons,omitempty"`
|
|
}
|
|
|
|
// HostCephMeta describes host-level Ceph cluster data.
|
|
type HostCephMeta struct {
|
|
FSID string `json:"fsid"`
|
|
Health HostCephHealthMeta `json:"health"`
|
|
MonMap HostCephMonitorMapMeta `json:"monMap,omitempty"`
|
|
MgrMap HostCephManagerMapMeta `json:"mgrMap,omitempty"`
|
|
OSDMap HostCephOSDMapMeta `json:"osdMap"`
|
|
PGMap HostCephPGMapMeta `json:"pgMap"`
|
|
Pools []HostCephPoolMeta `json:"pools,omitempty"`
|
|
Services []HostCephServiceMeta `json:"services,omitempty"`
|
|
CollectedAt time.Time `json:"collectedAt,omitempty"`
|
|
HealthStatus string `json:"healthStatus"`
|
|
NumOSDs int `json:"numOsds"`
|
|
NumOSDsUp int `json:"numOsdsUp"`
|
|
NumOSDsIn int `json:"numOsdsIn"`
|
|
NumPGs int `json:"numPGs"`
|
|
UsagePercent float64 `json:"usagePercent"`
|
|
}
|
|
|
|
// AgentMemoryMeta describes agent-reported memory including swap.
|
|
type AgentMemoryMeta struct {
|
|
Total int64 `json:"total,omitempty"`
|
|
Used int64 `json:"used,omitempty"`
|
|
Free int64 `json:"free,omitempty"`
|
|
SwapUsed int64 `json:"swapUsed,omitempty"`
|
|
SwapTotal int64 `json:"swapTotal,omitempty"`
|
|
}
|
|
|
|
// AgentData contains host agent-specific data.
|
|
type AgentData struct {
|
|
AgentID string `json:"agentId,omitempty"`
|
|
AgentVersion string `json:"agentVersion,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
MachineID string `json:"machineId,omitempty"`
|
|
TokenID string `json:"tokenId,omitempty"`
|
|
TokenName string `json:"tokenName,omitempty"`
|
|
TokenHint string `json:"tokenHint,omitempty"`
|
|
TokenLastUsedAt *time.Time `json:"tokenLastUsedAt,omitempty"`
|
|
Platform string `json:"platform,omitempty"`
|
|
HostProfile string `json:"hostProfile,omitempty"`
|
|
OSName string `json:"osName,omitempty"`
|
|
OSVersion string `json:"osVersion,omitempty"`
|
|
KernelVersion string `json:"kernelVersion,omitempty"`
|
|
Architecture string `json:"architecture,omitempty"`
|
|
CPUCount int `json:"cpuCount,omitempty"`
|
|
LoadAverage []float64 `json:"loadAverage,omitempty"`
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
IntervalSeconds int `json:"intervalSeconds,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"` // Max CPU temp in Celsius
|
|
NetworkInterfaces []NetworkInterface `json:"networkInterfaces,omitempty"`
|
|
Disks []DiskInfo `json:"disks,omitempty"`
|
|
Memory *AgentMemoryMeta `json:"memory,omitempty"`
|
|
Sensors *HostSensorMeta `json:"sensors,omitempty"`
|
|
RAID []HostRAIDMeta `json:"raid,omitempty"`
|
|
Unraid *HostUnraidMeta `json:"unraid,omitempty"`
|
|
DiskIO []HostDiskIOMeta `json:"diskIo,omitempty"`
|
|
Ceph *HostCephMeta `json:"ceph,omitempty"`
|
|
StorageRisk *StorageRisk `json:"storageRisk,omitempty"`
|
|
StorageRiskSummary string `json:"storageRiskSummary,omitempty"`
|
|
StoragePostureSummary string `json:"storagePostureSummary,omitempty"`
|
|
ProtectionReduced bool `json:"protectionReduced,omitempty"`
|
|
ProtectionSummary string `json:"protectionSummary,omitempty"`
|
|
RebuildInProgress bool `json:"rebuildInProgress,omitempty"`
|
|
RebuildSummary string `json:"rebuildSummary,omitempty"`
|
|
CommandsEnabled bool `json:"commandsEnabled,omitempty"`
|
|
ReportIP string `json:"reportIp,omitempty"`
|
|
DiskExclude []string `json:"diskExclude,omitempty"`
|
|
IsLegacy bool `json:"isLegacy,omitempty"`
|
|
NetInRate float64 `json:"netInRate,omitempty"`
|
|
NetOutRate float64 `json:"netOutRate,omitempty"`
|
|
DiskReadRate float64 `json:"diskReadRate,omitempty"`
|
|
DiskWriteRate float64 `json:"diskWriteRate,omitempty"`
|
|
// Internal link hints to proxmox resources.
|
|
LinkedNodeID string `json:"-"`
|
|
LinkedVMID string `json:"-"`
|
|
LinkedContainerID string `json:"-"`
|
|
}
|
|
|
|
// DockerPortMeta describes a container port mapping.
|
|
type DockerPortMeta struct {
|
|
PrivatePort int `json:"privatePort"`
|
|
PublicPort int `json:"publicPort,omitempty"`
|
|
Protocol string `json:"protocol"`
|
|
IP string `json:"ip,omitempty"`
|
|
}
|
|
|
|
// DockerNetworkMeta describes a container network attachment.
|
|
type DockerNetworkMeta struct {
|
|
Name string `json:"name"`
|
|
IPv4 string `json:"ipv4,omitempty"`
|
|
IPv6 string `json:"ipv6,omitempty"`
|
|
}
|
|
|
|
// DockerNetworkSubnetMeta describes an IPAM subnet on a Docker network.
|
|
type DockerNetworkSubnetMeta struct {
|
|
Subnet string `json:"subnet,omitempty"`
|
|
Gateway string `json:"gateway,omitempty"`
|
|
}
|
|
|
|
// DockerMountMeta describes a container volume mount.
|
|
type DockerMountMeta struct {
|
|
Type string `json:"type,omitempty"`
|
|
Source string `json:"source,omitempty"`
|
|
Destination string `json:"destination,omitempty"`
|
|
Mode string `json:"mode,omitempty"`
|
|
RW bool `json:"rw"`
|
|
}
|
|
|
|
// DockerUpdateStatusMeta describes container image update status.
|
|
type DockerUpdateStatusMeta struct {
|
|
UpdateAvailable bool `json:"updateAvailable"`
|
|
CurrentDigest string `json:"currentDigest,omitempty"`
|
|
LatestDigest string `json:"latestDigest,omitempty"`
|
|
LastChecked time.Time `json:"lastChecked,omitempty"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
// DockerServiceUpdateMeta captures service update progress.
|
|
type DockerServiceUpdateMeta struct {
|
|
State string `json:"state,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
|
}
|
|
|
|
// DockerServicePortMeta describes a published service port.
|
|
type DockerServicePortMeta struct {
|
|
Name string `json:"name,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
TargetPort uint32 `json:"targetPort,omitempty"`
|
|
PublishedPort uint32 `json:"publishedPort,omitempty"`
|
|
PublishMode string `json:"publishMode,omitempty"`
|
|
}
|
|
|
|
// DockerStorageUsageMeta captures one /system/df resource bucket.
|
|
type DockerStorageUsageMeta struct {
|
|
TotalCount int64 `json:"totalCount,omitempty"`
|
|
ActiveCount int64 `json:"activeCount,omitempty"`
|
|
TotalSizeBytes int64 `json:"totalSizeBytes,omitempty"`
|
|
ReclaimableBytes int64 `json:"reclaimableBytes,omitempty"`
|
|
}
|
|
|
|
// DockerData contains Docker host- and container-specific data.
|
|
type DockerData struct {
|
|
HostSourceID string `json:"hostSourceId,omitempty"` // raw model ID for the docker host
|
|
AgentID string `json:"agentId,omitempty"`
|
|
ContainerID string `json:"containerId,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
DisplayName string `json:"displayName,omitempty"`
|
|
CustomDisplayName string `json:"customDisplayName,omitempty"`
|
|
MachineID string `json:"machineId,omitempty"`
|
|
Image string `json:"image,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"`
|
|
Runtime string `json:"runtime,omitempty"`
|
|
RuntimeVersion string `json:"runtimeVersion,omitempty"`
|
|
DockerVersion string `json:"dockerVersion,omitempty"`
|
|
OS string `json:"os,omitempty"`
|
|
KernelVersion string `json:"kernelVersion,omitempty"`
|
|
Architecture string `json:"architecture,omitempty"`
|
|
AgentVersion string `json:"agentVersion,omitempty"`
|
|
CPUs int `json:"cpus,omitempty"`
|
|
TotalMemoryBytes int64 `json:"totalMemoryBytes,omitempty"`
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
LoadAverage []float64 `json:"loadAverage,omitempty"`
|
|
IntervalSeconds int `json:"intervalSeconds,omitempty"`
|
|
NetInRate float64 `json:"netInRate,omitempty"`
|
|
NetOutRate float64 `json:"netOutRate,omitempty"`
|
|
DiskReadRate float64 `json:"diskReadRate,omitempty"`
|
|
DiskWriteRate float64 `json:"diskWriteRate,omitempty"`
|
|
|
|
// Host-level summary fields (populated when Resource.Type == ResourceTypeAgent and Docker != nil)
|
|
ContainerCount int `json:"containerCount,omitempty"`
|
|
ImageCount int `json:"imageCount,omitempty"`
|
|
VolumeCount int `json:"volumeCount,omitempty"`
|
|
NetworkCount int `json:"networkCount,omitempty"`
|
|
NodeCount int `json:"nodeCount,omitempty"`
|
|
SecretCount int `json:"secretCount,omitempty"`
|
|
ConfigCount int `json:"configCount,omitempty"`
|
|
UpdatesAvailableCount int `json:"updatesAvailableCount,omitempty"`
|
|
UpdatesLastCheckedAt *time.Time `json:"updatesLastCheckedAt,omitempty"`
|
|
ImagesUsage *DockerStorageUsageMeta `json:"imagesUsage,omitempty"`
|
|
ContainersUsage *DockerStorageUsageMeta `json:"containersUsage,omitempty"`
|
|
VolumesUsage *DockerStorageUsageMeta `json:"volumesUsage,omitempty"`
|
|
BuildCacheUsage *DockerStorageUsageMeta `json:"buildCacheUsage,omitempty"`
|
|
TokenID string `json:"tokenId,omitempty"`
|
|
TokenName string `json:"tokenName,omitempty"`
|
|
TokenHint string `json:"tokenHint,omitempty"`
|
|
TokenLastUsedAt *time.Time `json:"tokenLastUsedAt,omitempty"`
|
|
Hidden bool `json:"hidden,omitempty"`
|
|
PendingUninstall bool `json:"pendingUninstall,omitempty"`
|
|
IsLegacy bool `json:"isLegacy,omitempty"`
|
|
Command *models.DockerHostCommandStatus `json:"command,omitempty"`
|
|
|
|
// Container-specific fields (populated when Resource.Type == ResourceTypeAppContainer)
|
|
ContainerState string `json:"containerState,omitempty"`
|
|
Health string `json:"health,omitempty"`
|
|
RestartCount int `json:"restartCount,omitempty"`
|
|
ExitCode int `json:"exitCode,omitempty"`
|
|
Ports []DockerPortMeta `json:"ports,omitempty"`
|
|
Labels map[string]string `json:"labels,omitempty"`
|
|
Networks []DockerNetworkMeta `json:"networks,omitempty"`
|
|
Mounts []DockerMountMeta `json:"mounts,omitempty"`
|
|
UpdateStatus *DockerUpdateStatusMeta `json:"updateStatus,omitempty"`
|
|
|
|
// Service-specific fields (populated when Resource.Type == ResourceTypeDockerService)
|
|
ServiceID string `json:"serviceId,omitempty"`
|
|
ServiceName string `json:"serviceName,omitempty"`
|
|
Stack string `json:"stack,omitempty"`
|
|
Mode string `json:"mode,omitempty"`
|
|
DesiredTasks int `json:"desiredTasks,omitempty"`
|
|
RunningTasks int `json:"runningTasks,omitempty"`
|
|
CompletedTasks int `json:"completedTasks,omitempty"`
|
|
ServiceUpdate *DockerServiceUpdateMeta `json:"serviceUpdate,omitempty"`
|
|
EndpointPorts []DockerServicePortMeta `json:"endpointPorts,omitempty"`
|
|
|
|
// Image-specific fields (populated when Resource.Type == ResourceTypeDockerImage)
|
|
ImageID string `json:"imageId,omitempty"`
|
|
RepoTags []string `json:"repoTags,omitempty"`
|
|
RepoDigests []string `json:"repoDigests,omitempty"`
|
|
SizeBytes int64 `json:"sizeBytes,omitempty"`
|
|
SharedSizeBytes int64 `json:"sharedSizeBytes,omitempty"`
|
|
ImageContainers int64 `json:"imageContainers,omitempty"`
|
|
|
|
// Volume-specific fields (populated when Resource.Type == ResourceTypeDockerVolume)
|
|
VolumeName string `json:"volumeName,omitempty"`
|
|
Driver string `json:"driver,omitempty"`
|
|
Mountpoint string `json:"mountpoint,omitempty"`
|
|
Scope string `json:"scope,omitempty"`
|
|
CreatedAt string `json:"createdAt,omitempty"`
|
|
RefCount int64 `json:"refCount,omitempty"`
|
|
Options map[string]string `json:"options,omitempty"`
|
|
|
|
// Network-specific fields (populated when Resource.Type == ResourceTypeDockerNetwork)
|
|
NetworkID string `json:"networkId,omitempty"`
|
|
EnableIPv4 bool `json:"enableIpv4,omitempty"`
|
|
EnableIPv6 bool `json:"enableIpv6,omitempty"`
|
|
Internal bool `json:"internal,omitempty"`
|
|
Attachable bool `json:"attachable,omitempty"`
|
|
Ingress bool `json:"ingress,omitempty"`
|
|
ConfigOnly bool `json:"configOnly,omitempty"`
|
|
Subnets []DockerNetworkSubnetMeta `json:"subnets,omitempty"`
|
|
|
|
// Task-specific fields (populated when Resource.Type == ResourceTypeDockerTask)
|
|
TaskID string `json:"taskId,omitempty"`
|
|
NodeID string `json:"nodeId,omitempty"`
|
|
NodeName string `json:"nodeName,omitempty"`
|
|
Slot int `json:"slot,omitempty"`
|
|
DesiredState string `json:"desiredState,omitempty"`
|
|
CurrentState string `json:"currentState,omitempty"`
|
|
Error string `json:"error,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
StartedAt *time.Time `json:"startedAt,omitempty"`
|
|
CompletedAt *time.Time `json:"completedAt,omitempty"`
|
|
|
|
// Swarm-node-specific fields (populated when Resource.Type == ResourceTypeDockerSwarmNode)
|
|
NodeRole string `json:"nodeRole,omitempty"`
|
|
Availability string `json:"availability,omitempty"`
|
|
Address string `json:"address,omitempty"`
|
|
ManagerReachability string `json:"managerReachability,omitempty"`
|
|
ManagerAddress string `json:"managerAddress,omitempty"`
|
|
Leader bool `json:"leader,omitempty"`
|
|
EngineVersion string `json:"engineVersion,omitempty"`
|
|
NanoCPUs int64 `json:"nanoCpus,omitempty"`
|
|
MemoryBytes int64 `json:"memoryBytes,omitempty"`
|
|
EngineLabels map[string]string `json:"engineLabels,omitempty"`
|
|
|
|
// Swarm secret/config fields (populated when Resource.Type == ResourceTypeDockerSecret or ResourceTypeDockerConfig)
|
|
SecretID string `json:"secretId,omitempty"`
|
|
SecretName string `json:"secretName,omitempty"`
|
|
ConfigID string `json:"configId,omitempty"`
|
|
ConfigName string `json:"configName,omitempty"`
|
|
TemplatingDriver string `json:"templatingDriver,omitempty"`
|
|
ObjectCreatedAt *time.Time `json:"objectCreatedAt,omitempty"`
|
|
ObjectUpdatedAt *time.Time `json:"objectUpdatedAt,omitempty"`
|
|
|
|
Swarm *DockerSwarmInfo `json:"swarm,omitempty"`
|
|
NetworkInterfaces []NetworkInterface `json:"networkInterfaces,omitempty"`
|
|
Disks []DiskInfo `json:"disks,omitempty"`
|
|
|
|
// These hold raw data for tools access
|
|
Containers []models.DockerContainer `json:"-"`
|
|
Images []models.DockerImage `json:"-"`
|
|
Volumes []models.DockerVolume `json:"-"`
|
|
NetworksRaw []models.DockerNetwork `json:"-"`
|
|
Services []models.DockerService `json:"-"`
|
|
Tasks []models.DockerTask `json:"-"`
|
|
Nodes []models.DockerNode `json:"-"`
|
|
Secrets []models.DockerSecret `json:"-"`
|
|
Configs []models.DockerConfig `json:"-"`
|
|
}
|
|
|
|
// PBSData contains Proxmox Backup Server data.
|
|
//
|
|
// NOTE: Some tools need per-datastore details; those are exposed via Datastores.
|
|
type PBSData struct {
|
|
InstanceID string `json:"instanceId,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
HostURL string `json:"hostUrl,omitempty"`
|
|
GuestURL string `json:"guestUrl,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
DatastoreCount int `json:"datastoreCount,omitempty"`
|
|
Datastores []PBSDatastoreMeta `json:"datastores,omitempty"`
|
|
DatastoreDetails []models.PBSDatastore `json:"datastoreDetails,omitempty"`
|
|
StorageRisk *StorageRisk `json:"storageRisk,omitempty"`
|
|
AffectedDatastoreCount int `json:"affectedDatastoreCount,omitempty"`
|
|
AffectedDatastores []string `json:"affectedDatastores,omitempty"`
|
|
AffectedDatastoreSummary string `json:"affectedDatastoreSummary,omitempty"`
|
|
ProtectedWorkloadCount int `json:"protectedWorkloadCount,omitempty"`
|
|
ProtectedWorkloadTypes []string `json:"protectedWorkloadTypes,omitempty"`
|
|
ProtectedWorkloadNames []string `json:"protectedWorkloadNames,omitempty"`
|
|
ProtectedWorkloadSummary string `json:"protectedWorkloadSummary,omitempty"`
|
|
PostureSummary string `json:"postureSummary,omitempty"`
|
|
BackupJobCount int `json:"backupJobCount,omitempty"`
|
|
BackupJobs []models.PBSBackupJob `json:"backupJobs,omitempty"`
|
|
SyncJobCount int `json:"syncJobCount,omitempty"`
|
|
SyncJobs []models.PBSSyncJob `json:"syncJobs,omitempty"`
|
|
VerifyJobCount int `json:"verifyJobCount,omitempty"`
|
|
VerifyJobs []models.PBSVerifyJob `json:"verifyJobs,omitempty"`
|
|
PruneJobCount int `json:"pruneJobCount,omitempty"`
|
|
PruneJobs []models.PBSPruneJob `json:"pruneJobs,omitempty"`
|
|
GarbageJobCount int `json:"garbageJobCount,omitempty"`
|
|
GarbageJobs []models.PBSGarbageJob `json:"garbageJobs,omitempty"`
|
|
JobHealthEvidenceCount int `json:"jobHealthEvidenceCount,omitempty"`
|
|
JobHealthEvidence []models.PBSJobHealthEvidence `json:"jobHealthEvidence,omitempty"`
|
|
ConnectionHealth string `json:"connectionHealth,omitempty"`
|
|
}
|
|
|
|
// PBSDatastoreMeta describes a single PBS datastore.
|
|
type PBSDatastoreMeta struct {
|
|
Name string `json:"name"`
|
|
Total int64 `json:"total"`
|
|
Used int64 `json:"used"`
|
|
Available int64 `json:"available"`
|
|
UsagePercent float64 `json:"usagePercent"`
|
|
Status string `json:"status"`
|
|
Error string `json:"error,omitempty"`
|
|
DeduplicationFactor float64 `json:"deduplicationFactor,omitempty"`
|
|
}
|
|
|
|
// PMGNodeMeta describes a PMG cluster node.
|
|
type PMGNodeMeta struct {
|
|
Name string `json:"name"`
|
|
Status string `json:"status"`
|
|
Role string `json:"role,omitempty"`
|
|
Uptime int64 `json:"uptime,omitempty"`
|
|
LoadAvg string `json:"loadAvg,omitempty"`
|
|
QueueStatus *PMGQueueMeta `json:"queueStatus,omitempty"`
|
|
}
|
|
|
|
// PMGQueueMeta describes a PMG node's postfix queue status.
|
|
type PMGQueueMeta struct {
|
|
Active int `json:"active"`
|
|
Deferred int `json:"deferred"`
|
|
Hold int `json:"hold"`
|
|
Incoming int `json:"incoming"`
|
|
Total int `json:"total"`
|
|
OldestAge int64 `json:"oldestAge,omitempty"`
|
|
UpdatedAt time.Time `json:"updatedAt,omitempty"`
|
|
}
|
|
|
|
// PMGMailStatsMeta describes PMG mail statistics.
|
|
type PMGMailStatsMeta struct {
|
|
Timeframe string `json:"timeframe"`
|
|
CountTotal float64 `json:"countTotal"`
|
|
CountIn float64 `json:"countIn"`
|
|
CountOut float64 `json:"countOut"`
|
|
SpamIn float64 `json:"spamIn"`
|
|
SpamOut float64 `json:"spamOut"`
|
|
VirusIn float64 `json:"virusIn"`
|
|
VirusOut float64 `json:"virusOut"`
|
|
BouncesIn float64 `json:"bouncesIn"`
|
|
BouncesOut float64 `json:"bouncesOut"`
|
|
BytesIn float64 `json:"bytesIn"`
|
|
BytesOut float64 `json:"bytesOut"`
|
|
GreylistCount float64 `json:"greylistCount"`
|
|
JunkIn float64 `json:"junkIn"`
|
|
RBLRejects float64 `json:"rblRejects"`
|
|
AverageProcessTimeMs float64 `json:"averageProcessTimeMs"`
|
|
PregreetRejects float64 `json:"pregreetRejects"`
|
|
UpdatedAt time.Time `json:"updatedAt,omitempty"`
|
|
}
|
|
|
|
// PMGQuarantineMeta describes PMG quarantine totals.
|
|
type PMGQuarantineMeta struct {
|
|
Spam int `json:"spam"`
|
|
Virus int `json:"virus"`
|
|
Attachment int `json:"attachment"`
|
|
Blacklisted int `json:"blacklisted"`
|
|
}
|
|
|
|
// PMGSpamBucketMeta describes a spam score distribution bucket.
|
|
type PMGSpamBucketMeta struct {
|
|
Bucket string `json:"bucket"`
|
|
Count float64 `json:"count"`
|
|
}
|
|
|
|
// PMGRelayDomainMeta represents a relay domain configured in Proxmox Mail Gateway.
|
|
type PMGRelayDomainMeta struct {
|
|
Domain string `json:"domain"`
|
|
Comment string `json:"comment,omitempty"`
|
|
}
|
|
|
|
// PMGDomainStatMeta describes mail statistics for a domain over a fixed time window
|
|
// (currently: the last 24 hours at poll time).
|
|
type PMGDomainStatMeta struct {
|
|
Domain string `json:"domain"`
|
|
MailCount float64 `json:"mailCount"`
|
|
SpamCount float64 `json:"spamCount"`
|
|
VirusCount float64 `json:"virusCount"`
|
|
Bytes float64 `json:"bytes,omitempty"`
|
|
}
|
|
|
|
// PMGData contains Proxmox Mail Gateway data.
|
|
type PMGData struct {
|
|
InstanceID string `json:"instanceId,omitempty"`
|
|
Hostname string `json:"hostname,omitempty"`
|
|
HostURL string `json:"hostUrl,omitempty"`
|
|
GuestURL string `json:"guestUrl,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
NodeCount int `json:"nodeCount,omitempty"`
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
QueueActive int `json:"queueActive,omitempty"`
|
|
QueueDeferred int `json:"queueDeferred,omitempty"`
|
|
QueueHold int `json:"queueHold,omitempty"`
|
|
QueueIncoming int `json:"queueIncoming,omitempty"`
|
|
QueueTotal int `json:"queueTotal,omitempty"`
|
|
MailCountTotal float64 `json:"mailCountTotal,omitempty"`
|
|
SpamIn float64 `json:"spamIn,omitempty"`
|
|
VirusIn float64 `json:"virusIn,omitempty"`
|
|
ConnectionHealth string `json:"connectionHealth,omitempty"`
|
|
LastUpdated time.Time `json:"lastUpdated,omitempty"`
|
|
|
|
Nodes []PMGNodeMeta `json:"nodes,omitempty"`
|
|
MailStats *PMGMailStatsMeta `json:"mailStats,omitempty"`
|
|
MailCount []models.PMGMailCountPoint `json:"mailCount,omitempty"`
|
|
Quarantine *PMGQuarantineMeta `json:"quarantine,omitempty"`
|
|
SpamDistribution []PMGSpamBucketMeta `json:"spamDistribution,omitempty"`
|
|
RelayDomains []PMGRelayDomainMeta `json:"relayDomains,omitempty"`
|
|
DomainStats []PMGDomainStatMeta `json:"domainStats,omitempty"`
|
|
DomainStatsAsOf time.Time `json:"domainStatsAsOf,omitempty"`
|
|
}
|
|
|
|
// VMwareData contains VMware vSphere metadata for canonical agent, vm,
|
|
// storage, and network resources projected from one vCenter connection.
|
|
type VMwareData struct {
|
|
ConnectionID string `json:"connectionId,omitempty"`
|
|
ConnectionName string `json:"connectionName,omitempty"`
|
|
VCenterHost string `json:"vcenterHost,omitempty"`
|
|
ManagedObjectID string `json:"managedObjectId,omitempty"`
|
|
EntityType string `json:"entityType,omitempty"`
|
|
HostUUID string `json:"hostUuid,omitempty"`
|
|
DatacenterID string `json:"datacenterId,omitempty"`
|
|
DatacenterName string `json:"datacenterName,omitempty"`
|
|
ComputeResourceID string `json:"computeResourceId,omitempty"`
|
|
ComputeResourceName string `json:"computeResourceName,omitempty"`
|
|
ClusterID string `json:"clusterId,omitempty"`
|
|
ClusterName string `json:"clusterName,omitempty"`
|
|
ClusterHAEnabled *bool `json:"clusterHaEnabled,omitempty"`
|
|
ClusterDRSEnabled *bool `json:"clusterDrsEnabled,omitempty"`
|
|
FolderID string `json:"folderId,omitempty"`
|
|
FolderName string `json:"folderName,omitempty"`
|
|
ResourcePoolID string `json:"resourcePoolId,omitempty"`
|
|
ResourcePoolName string `json:"resourcePoolName,omitempty"`
|
|
RuntimeHostID string `json:"runtimeHostId,omitempty"`
|
|
RuntimeHostName string `json:"runtimeHostName,omitempty"`
|
|
ConnectionState string `json:"connectionState,omitempty"`
|
|
PowerState string `json:"powerState,omitempty"`
|
|
OverallStatus string `json:"overallStatus,omitempty"`
|
|
CPUCount int `json:"cpuCount,omitempty"`
|
|
MemorySizeMiB int64 `json:"memorySizeMib,omitempty"`
|
|
DatastoreType string `json:"datastoreType,omitempty"`
|
|
DatastoreIDs []string `json:"datastoreIds,omitempty"`
|
|
DatastoreNames []string `json:"datastoreNames,omitempty"`
|
|
DatastoreURL string `json:"datastoreUrl,omitempty"`
|
|
DatastoreAccessible *bool `json:"datastoreAccessible,omitempty"`
|
|
MultipleHostAccess *bool `json:"multipleHostAccess,omitempty"`
|
|
MaintenanceMode string `json:"maintenanceMode,omitempty"`
|
|
NetworkType string `json:"networkType,omitempty"`
|
|
NetworkHostIDs []string `json:"networkHostIds,omitempty"`
|
|
NetworkHostNames []string `json:"networkHostNames,omitempty"`
|
|
NetworkVMIDs []string `json:"networkVmIds,omitempty"`
|
|
NetworkVMNames []string `json:"networkVmNames,omitempty"`
|
|
InstanceUUID string `json:"instanceUuid,omitempty"`
|
|
BIOSUUID string `json:"biosUuid,omitempty"`
|
|
GuestOSFamily string `json:"guestOsFamily,omitempty"`
|
|
GuestHostname string `json:"guestHostname,omitempty"`
|
|
GuestIPAddresses []string `json:"guestIpAddresses,omitempty"`
|
|
ActiveAlarmCount int `json:"activeAlarmCount,omitempty"`
|
|
ActiveAlarmSummary string `json:"activeAlarmSummary,omitempty"`
|
|
RecentTaskCount int `json:"recentTaskCount,omitempty"`
|
|
RecentTaskSummary string `json:"recentTaskSummary,omitempty"`
|
|
SnapshotCount int `json:"snapshotCount,omitempty"`
|
|
CurrentSnapshotID string `json:"currentSnapshotId,omitempty"`
|
|
SnapshotTree []VMwareSnapshotData `json:"snapshotTree,omitempty"`
|
|
NetworkAdapters []VMwareNetworkAdapterData `json:"networkAdapters,omitempty"`
|
|
VirtualDisks []VMwareVirtualDiskData `json:"virtualDisks,omitempty"`
|
|
Tools *VMwareToolsData `json:"tools,omitempty"`
|
|
Hardware *VMwareVMHardwareData `json:"hardware,omitempty"`
|
|
}
|
|
|
|
// VMwareSnapshotData contains one node in the vSphere VM snapshot tree. It is
|
|
// read-side workload context only, not a Pulse recovery artifact.
|
|
type VMwareSnapshotData struct {
|
|
Snapshot string `json:"snapshot,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
ID int `json:"id,omitempty"`
|
|
CreatedAt *time.Time `json:"createdAt,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
Quiesced bool `json:"quiesced"`
|
|
ReplaySupported bool `json:"replaySupported,omitempty"`
|
|
Current bool `json:"current,omitempty"`
|
|
Children []VMwareSnapshotData `json:"children,omitempty"`
|
|
}
|
|
|
|
// VMwareNetworkAdapterData contains vCenter VM hardware Ethernet adapter facts
|
|
// as read-only workload context, not a Pulse network-control model.
|
|
type VMwareNetworkAdapterData struct {
|
|
NIC string `json:"nic,omitempty"`
|
|
Label string `json:"label,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
MACType string `json:"macType,omitempty"`
|
|
MACAddress string `json:"macAddress,omitempty"`
|
|
PCISlotNumber *int64 `json:"pciSlotNumber,omitempty"`
|
|
BackingType string `json:"backingType,omitempty"`
|
|
NetworkID string `json:"networkId,omitempty"`
|
|
NetworkName string `json:"networkName,omitempty"`
|
|
DistributedSwitchUUID string `json:"distributedSwitchUuid,omitempty"`
|
|
DistributedPort string `json:"distributedPort,omitempty"`
|
|
OpaqueNetworkType string `json:"opaqueNetworkType,omitempty"`
|
|
OpaqueNetworkID string `json:"opaqueNetworkId,omitempty"`
|
|
HostDevice string `json:"hostDevice,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
StartConnected bool `json:"startConnected"`
|
|
AllowGuestControl bool `json:"allowGuestControl"`
|
|
WakeOnLANEnabled bool `json:"wakeOnLanEnabled"`
|
|
UPTCompatibility bool `json:"uptCompatibilityEnabled,omitempty"`
|
|
UPTV2Compatibility bool `json:"uptV2CompatibilityEnabled,omitempty"`
|
|
}
|
|
|
|
// VMwareVirtualDiskData contains vCenter VM hardware disk facts as read-only
|
|
// workload context, not a Pulse storage/recovery model.
|
|
type VMwareVirtualDiskData struct {
|
|
Disk string `json:"disk,omitempty"`
|
|
Label string `json:"label,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
IDEPrimary *bool `json:"idePrimary,omitempty"`
|
|
IDEMaster *bool `json:"ideMaster,omitempty"`
|
|
SCSIBus *int64 `json:"scsiBus,omitempty"`
|
|
SCSIUnit *int64 `json:"scsiUnit,omitempty"`
|
|
SATABus *int64 `json:"sataBus,omitempty"`
|
|
SATAUnit *int64 `json:"sataUnit,omitempty"`
|
|
NVMEBus *int64 `json:"nvmeBus,omitempty"`
|
|
NVMEUnit *int64 `json:"nvmeUnit,omitempty"`
|
|
BackingType string `json:"backingType,omitempty"`
|
|
VMDKFile string `json:"vmdkFile,omitempty"`
|
|
DatastoreName string `json:"datastoreName,omitempty"`
|
|
CapacityBytes *int64 `json:"capacityBytes,omitempty"`
|
|
}
|
|
|
|
// VMwareToolsData contains VMware Tools runtime facts as read-only VM context.
|
|
type VMwareToolsData struct {
|
|
AutoUpdateSupported *bool `json:"autoUpdateSupported,omitempty"`
|
|
InstallAttemptCount *int64 `json:"installAttemptCount,omitempty"`
|
|
ErrorMessage string `json:"errorMessage,omitempty"`
|
|
VersionNumber *int64 `json:"versionNumber,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
UpgradePolicy string `json:"upgradePolicy,omitempty"`
|
|
VersionStatus string `json:"versionStatus,omitempty"`
|
|
InstallType string `json:"installType,omitempty"`
|
|
RunState string `json:"runState,omitempty"`
|
|
GuestRebootRequested *bool `json:"guestRebootRequested,omitempty"`
|
|
GuestRebootComponents []string `json:"guestRebootComponents,omitempty"`
|
|
GuestRebootRequestTime string `json:"guestRebootRequestTime,omitempty"`
|
|
}
|
|
|
|
// VMwareBootDeviceData contains one vCenter VM boot-device entry as read-only
|
|
// virtual hardware context.
|
|
type VMwareBootDeviceData struct {
|
|
Type string `json:"type,omitempty"`
|
|
NIC string `json:"nic,omitempty"`
|
|
Disks []string `json:"disks,omitempty"`
|
|
}
|
|
|
|
// VMwareVMHardwareData contains vCenter VM virtual hardware, CPU, memory, and
|
|
// boot configuration facts as read-only VM context.
|
|
type VMwareVMHardwareData struct {
|
|
GuestOS string `json:"guestOs,omitempty"`
|
|
InstantCloneFrozen *bool `json:"instantCloneFrozen,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
UpgradePolicy string `json:"upgradePolicy,omitempty"`
|
|
UpgradeVersion string `json:"upgradeVersion,omitempty"`
|
|
UpgradeStatus string `json:"upgradeStatus,omitempty"`
|
|
UpgradeErrorMessage string `json:"upgradeErrorMessage,omitempty"`
|
|
BootType string `json:"bootType,omitempty"`
|
|
EFILegacyBoot *bool `json:"efiLegacyBoot,omitempty"`
|
|
BootNetworkProtocol string `json:"bootNetworkProtocol,omitempty"`
|
|
BootDelayMilliseconds *int64 `json:"bootDelayMilliseconds,omitempty"`
|
|
BootRetry *bool `json:"bootRetry,omitempty"`
|
|
BootRetryDelayMilliseconds *int64 `json:"bootRetryDelayMilliseconds,omitempty"`
|
|
EnterSetupMode *bool `json:"enterSetupMode,omitempty"`
|
|
BootDevices []VMwareBootDeviceData `json:"bootDevices,omitempty"`
|
|
CPUCoresPerSocket *int64 `json:"cpuCoresPerSocket,omitempty"`
|
|
CPUHotAddEnabled *bool `json:"cpuHotAddEnabled,omitempty"`
|
|
CPUHotRemoveEnabled *bool `json:"cpuHotRemoveEnabled,omitempty"`
|
|
MemoryHotAddEnabled *bool `json:"memoryHotAddEnabled,omitempty"`
|
|
MemoryHotAddIncrementMiB *int64 `json:"memoryHotAddIncrementMib,omitempty"`
|
|
MemoryHotAddLimitMiB *int64 `json:"memoryHotAddLimitMib,omitempty"`
|
|
}
|
|
|
|
// TrueNASData contains TrueNAS-specific metadata for TrueNAS resources.
|
|
type TrueNASData struct {
|
|
Hostname string `json:"hostname,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
StorageRisk *StorageRisk `json:"storageRisk,omitempty"`
|
|
StorageRiskSummary string `json:"storageRiskSummary,omitempty"`
|
|
StoragePostureSummary string `json:"storagePostureSummary,omitempty"`
|
|
ProtectionReduced bool `json:"protectionReduced,omitempty"`
|
|
ProtectionSummary string `json:"protectionSummary,omitempty"`
|
|
RebuildInProgress bool `json:"rebuildInProgress,omitempty"`
|
|
RebuildSummary string `json:"rebuildSummary,omitempty"`
|
|
App *TrueNASApp `json:"app,omitempty"`
|
|
VM *TrueNASVM `json:"vm,omitempty"`
|
|
Share *TrueNASShare `json:"share,omitempty"`
|
|
Services []TrueNASService `json:"services,omitempty"`
|
|
}
|
|
|
|
// TrueNASService contains service.query data for one native TrueNAS system
|
|
// service.
|
|
type TrueNASService struct {
|
|
ID string `json:"id,omitempty"`
|
|
Service string `json:"service,omitempty"`
|
|
Enabled bool `json:"enabled"`
|
|
State string `json:"state,omitempty"`
|
|
PIDs []int `json:"pids,omitempty"`
|
|
}
|
|
|
|
// TrueNASApp contains app.query / active_workloads data for one TrueNAS app.
|
|
type TrueNASApp struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
HumanVersion string `json:"humanVersion,omitempty"`
|
|
CustomApp bool `json:"customApp,omitempty"`
|
|
UpgradeAvailable bool `json:"upgradeAvailable,omitempty"`
|
|
ImageUpdatesAvailable bool `json:"imageUpdatesAvailable,omitempty"`
|
|
Notes string `json:"notes,omitempty"`
|
|
ContainerCount int `json:"containerCount,omitempty"`
|
|
UsedHostIPs []string `json:"usedHostIps,omitempty"`
|
|
UsedPorts []TrueNASAppPort `json:"usedPorts,omitempty"`
|
|
Containers []TrueNASAppContainer `json:"containers,omitempty"`
|
|
Volumes []TrueNASAppVolume `json:"volumes,omitempty"`
|
|
Images []string `json:"images,omitempty"`
|
|
Networks []TrueNASAppNetwork `json:"networks,omitempty"`
|
|
Stats *TrueNASAppStats `json:"stats,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppStats contains app.stats telemetry metadata that is not already
|
|
// normalized into top-level Resource metrics.
|
|
type TrueNASAppStats struct {
|
|
IntervalSeconds int `json:"intervalSeconds,omitempty"`
|
|
CollectedAt time.Time `json:"collectedAt,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppPort describes a TrueNAS app published port entry.
|
|
type TrueNASAppPort struct {
|
|
ContainerPort int `json:"containerPort,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
HostPorts []TrueNASAppHostPort `json:"hostPorts,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppHostPort describes a host binding for a TrueNAS app port.
|
|
type TrueNASAppHostPort struct {
|
|
HostPort int `json:"hostPort,omitempty"`
|
|
HostIP string `json:"hostIp,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppContainer describes a runtime container inside a TrueNAS app.
|
|
type TrueNASAppContainer struct {
|
|
ID string `json:"id,omitempty"`
|
|
ServiceName string `json:"serviceName,omitempty"`
|
|
Image string `json:"image,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
PortConfig []TrueNASAppPort `json:"portConfig,omitempty"`
|
|
VolumeMounts []TrueNASAppVolume `json:"volumeMounts,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppVolume describes a TrueNAS app volume or bind mount.
|
|
type TrueNASAppVolume struct {
|
|
Source string `json:"source,omitempty"`
|
|
Destination string `json:"destination,omitempty"`
|
|
Mode string `json:"mode,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
}
|
|
|
|
// TrueNASAppNetwork describes a network attached to a TrueNAS app workload.
|
|
type TrueNASAppNetwork struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Labels map[string]string `json:"labels,omitempty"`
|
|
}
|
|
|
|
// TrueNASVM contains vm.query data for one TrueNAS virtual machine.
|
|
type TrueNASVM struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
DomainState string `json:"domainState,omitempty"`
|
|
PID int `json:"pid,omitempty"`
|
|
VCPUs int `json:"vcpus,omitempty"`
|
|
Cores int `json:"cores,omitempty"`
|
|
Threads int `json:"threads,omitempty"`
|
|
MemoryBytes int64 `json:"memoryBytes,omitempty"`
|
|
MinMemoryBytes int64 `json:"minMemoryBytes,omitempty"`
|
|
CPUMode string `json:"cpuMode,omitempty"`
|
|
CPUModel string `json:"cpuModel,omitempty"`
|
|
Bootloader string `json:"bootloader,omitempty"`
|
|
Autostart bool `json:"autostart,omitempty"`
|
|
SuspendOnSnapshot bool `json:"suspendOnSnapshot,omitempty"`
|
|
TrustedPlatformModule bool `json:"trustedPlatformModule,omitempty"`
|
|
SecureBoot bool `json:"secureBoot,omitempty"`
|
|
Time string `json:"time,omitempty"`
|
|
ArchType string `json:"archType,omitempty"`
|
|
MachineType string `json:"machineType,omitempty"`
|
|
UUID string `json:"uuid,omitempty"`
|
|
DisplayAvailable bool `json:"displayAvailable,omitempty"`
|
|
DeviceCount int `json:"deviceCount,omitempty"`
|
|
DiskCount int `json:"diskCount,omitempty"`
|
|
NICCount int `json:"nicCount,omitempty"`
|
|
DisplayCount int `json:"displayCount,omitempty"`
|
|
CDROMCount int `json:"cdromCount,omitempty"`
|
|
USBCount int `json:"usbCount,omitempty"`
|
|
PCICount int `json:"pciCount,omitempty"`
|
|
}
|
|
|
|
// TrueNASShare contains sharing.smb.query / sharing.nfs.query data for one
|
|
// native TrueNAS network share.
|
|
type TrueNASShare struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
Path string `json:"path,omitempty"`
|
|
Dataset string `json:"dataset,omitempty"`
|
|
RelativePath string `json:"relativePath,omitempty"`
|
|
Comment string `json:"comment,omitempty"`
|
|
Enabled bool `json:"enabled"`
|
|
ReadOnly bool `json:"readOnly"`
|
|
Browsable bool `json:"browsable,omitempty"`
|
|
Locked bool `json:"locked,omitempty"`
|
|
AccessBasedEnumeration bool `json:"accessBasedEnumeration,omitempty"`
|
|
AuditEnabled bool `json:"auditEnabled,omitempty"`
|
|
ExposeSnapshots bool `json:"exposeSnapshots,omitempty"`
|
|
Aliases []string `json:"aliases,omitempty"`
|
|
Hosts []string `json:"hosts,omitempty"`
|
|
Networks []string `json:"networks,omitempty"`
|
|
Security []string `json:"security,omitempty"`
|
|
MapRootUser string `json:"mapRootUser,omitempty"`
|
|
MapRootGroup string `json:"mapRootGroup,omitempty"`
|
|
MapAllUser string `json:"mapAllUser,omitempty"`
|
|
MapAllGroup string `json:"mapAllGroup,omitempty"`
|
|
}
|
|
|
|
// AvailabilityData contains agentless endpoint probe metadata for a resource.
|
|
type AvailabilityData struct {
|
|
TargetID string `json:"targetId,omitempty"`
|
|
Name string `json:"name,omitempty"`
|
|
TargetKind string `json:"targetKind,omitempty"`
|
|
Address string `json:"address,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
Port int `json:"port,omitempty"`
|
|
Path string `json:"path,omitempty"`
|
|
Enabled bool `json:"enabled"`
|
|
Available bool `json:"available"`
|
|
LastChecked time.Time `json:"lastChecked,omitempty"`
|
|
LastSuccess time.Time `json:"lastSuccess,omitempty"`
|
|
LatencyMillis int64 `json:"latencyMillis,omitempty"`
|
|
ConsecutiveFailures int `json:"consecutiveFailures,omitempty"`
|
|
LastError string `json:"lastError,omitempty"`
|
|
FailureThreshold int `json:"failureThreshold,omitempty"`
|
|
PollIntervalSeconds int `json:"pollIntervalSeconds,omitempty"`
|
|
TimeoutMillis int `json:"timeoutMillis,omitempty"`
|
|
}
|
|
|
|
// K8sMetricCapabilities describes which Kubernetes metric families are available
|
|
// for this cluster right now based on active collection paths.
|
|
type K8sMetricCapabilities struct {
|
|
NodeCPUMemory bool `json:"nodeCpuMemory"`
|
|
NodeTelemetry bool `json:"nodeTelemetry"`
|
|
PodCPUMemory bool `json:"podCpuMemory"`
|
|
PodNetwork bool `json:"podNetwork"`
|
|
PodEphemeralDisk bool `json:"podEphemeralDisk"`
|
|
PodDiskIO bool `json:"podDiskIo"`
|
|
}
|
|
|
|
// K8sData contains Kubernetes data.
|
|
type K8sData struct {
|
|
ClusterID string `json:"clusterId,omitempty"`
|
|
ClusterName string `json:"clusterName,omitempty"`
|
|
ResourceUID string `json:"resourceUid,omitempty"`
|
|
ResourceKind string `json:"resourceKind,omitempty"`
|
|
SourceName string `json:"sourceName,omitempty"` // raw model Name before display-name resolution
|
|
SourceStatus string `json:"sourceStatus,omitempty"` // raw model Status before normalization
|
|
AgentID string `json:"agentId,omitempty"`
|
|
Context string `json:"context,omitempty"`
|
|
Server string `json:"server,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
PendingUninstall bool `json:"pendingUninstall,omitempty"`
|
|
AgentVersion string `json:"agentVersion,omitempty"` // cluster: k8s agent version
|
|
IntervalSeconds int `json:"intervalSeconds,omitempty"` // cluster: telemetry interval
|
|
NodeUID string `json:"nodeUid,omitempty"`
|
|
NodeName string `json:"nodeName,omitempty"`
|
|
Ready bool `json:"ready,omitempty"`
|
|
Unschedulable bool `json:"unschedulable,omitempty"`
|
|
Roles []string `json:"roles,omitempty"`
|
|
KubeletVersion string `json:"kubeletVersion,omitempty"`
|
|
ContainerRuntimeVersion string `json:"containerRuntimeVersion,omitempty"`
|
|
OSImage string `json:"osImage,omitempty"`
|
|
KernelVersion string `json:"kernelVersion,omitempty"`
|
|
Architecture string `json:"architecture,omitempty"`
|
|
CapacityCPU int64 `json:"capacityCpuCores,omitempty"`
|
|
CapacityMemoryBytes int64 `json:"capacityMemoryBytes,omitempty"`
|
|
CapacityPods int64 `json:"capacityPods,omitempty"`
|
|
AllocCPU int64 `json:"allocatableCpuCores,omitempty"`
|
|
AllocMemoryBytes int64 `json:"allocatableMemoryBytes,omitempty"`
|
|
AllocPods int64 `json:"allocatablePods,omitempty"`
|
|
Namespace string `json:"namespace,omitempty"`
|
|
PodUID string `json:"podUid,omitempty"`
|
|
PodPhase string `json:"podPhase,omitempty"`
|
|
PodReason string `json:"podReason,omitempty"` // pod: status reason
|
|
PodMessage string `json:"podMessage,omitempty"` // pod: status message
|
|
PodContainers []K8sPodContainer `json:"podContainers,omitempty"` // pod: sub-containers
|
|
UptimeSeconds int64 `json:"uptimeSeconds,omitempty"`
|
|
Temperature *float64 `json:"temperature,omitempty"`
|
|
Restarts int `json:"restarts,omitempty"`
|
|
OwnerKind string `json:"ownerKind,omitempty"`
|
|
OwnerName string `json:"ownerName,omitempty"`
|
|
Image string `json:"image,omitempty"`
|
|
Labels map[string]string `json:"labels,omitempty"`
|
|
DeploymentUID string `json:"deploymentUid,omitempty"`
|
|
ReplicaSetUID string `json:"replicaSetUid,omitempty"`
|
|
StatefulSetUID string `json:"statefulSetUid,omitempty"`
|
|
DaemonSetUID string `json:"daemonSetUid,omitempty"`
|
|
ServiceUID string `json:"serviceUid,omitempty"`
|
|
JobUID string `json:"jobUid,omitempty"`
|
|
CronJobUID string `json:"cronJobUid,omitempty"`
|
|
IngressUID string `json:"ingressUid,omitempty"`
|
|
EndpointSliceUID string `json:"endpointSliceUid,omitempty"`
|
|
NetworkPolicyUID string `json:"networkPolicyUid,omitempty"`
|
|
PersistentVolumeUID string `json:"persistentVolumeUid,omitempty"`
|
|
PersistentVolumeClaimUID string `json:"persistentVolumeClaimUid,omitempty"`
|
|
StorageClassUID string `json:"storageClassUid,omitempty"`
|
|
ConfigMapUID string `json:"configMapUid,omitempty"`
|
|
SecretUID string `json:"secretUid,omitempty"`
|
|
ServiceAccountUID string `json:"serviceAccountUid,omitempty"`
|
|
RoleUID string `json:"roleUid,omitempty"`
|
|
ClusterRoleUID string `json:"clusterRoleUid,omitempty"`
|
|
RoleBindingUID string `json:"roleBindingUid,omitempty"`
|
|
ClusterRoleBindingUID string `json:"clusterRoleBindingUid,omitempty"`
|
|
RoleKind string `json:"roleKind,omitempty"`
|
|
RoleName string `json:"roleName,omitempty"`
|
|
RuleCount int `json:"ruleCount,omitempty"`
|
|
SubjectCount int `json:"subjectCount,omitempty"`
|
|
SubjectKinds []string `json:"subjectKinds,omitempty"`
|
|
AggregationLabels map[string]string `json:"aggregationLabels,omitempty"`
|
|
ResourceQuotaUID string `json:"resourceQuotaUid,omitempty"`
|
|
LimitRangeUID string `json:"limitRangeUid,omitempty"`
|
|
PodDisruptionBudgetUID string `json:"podDisruptionBudgetUid,omitempty"`
|
|
HorizontalPodAutoscalerUID string `json:"horizontalPodAutoscalerUid,omitempty"`
|
|
EventUID string `json:"eventUid,omitempty"`
|
|
NamespaceUID string `json:"namespaceUid,omitempty"`
|
|
DesiredReplicas int32 `json:"desiredReplicas,omitempty"`
|
|
UpdatedReplicas int32 `json:"updatedReplicas,omitempty"`
|
|
ReadyReplicas int32 `json:"readyReplicas,omitempty"`
|
|
AvailableReplicas int32 `json:"availableReplicas,omitempty"`
|
|
CurrentReplicas int32 `json:"currentReplicas,omitempty"`
|
|
FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"`
|
|
ObservedGeneration int64 `json:"observedGeneration,omitempty"`
|
|
DesiredNumberScheduled int32 `json:"desiredNumberScheduled,omitempty"`
|
|
CurrentNumberScheduled int32 `json:"currentNumberScheduled,omitempty"`
|
|
NumberReady int32 `json:"numberReady,omitempty"`
|
|
NumberAvailable int32 `json:"numberAvailable,omitempty"`
|
|
NumberUnavailable int32 `json:"numberUnavailable,omitempty"`
|
|
NumberMisscheduled int32 `json:"numberMisscheduled,omitempty"`
|
|
ServiceName string `json:"serviceName,omitempty"`
|
|
ServiceType string `json:"serviceType,omitempty"`
|
|
ClusterIP string `json:"clusterIp,omitempty"`
|
|
ExternalIPs []string `json:"externalIps,omitempty"`
|
|
ServicePorts []K8sServicePort `json:"servicePorts,omitempty"`
|
|
Selector map[string]string `json:"selector,omitempty"`
|
|
Succeeded int32 `json:"succeeded,omitempty"`
|
|
Failed int32 `json:"failed,omitempty"`
|
|
Active int32 `json:"active,omitempty"`
|
|
Schedule string `json:"schedule,omitempty"`
|
|
Suspend bool `json:"suspend,omitempty"`
|
|
LastScheduleTime *time.Time `json:"lastScheduleTime,omitempty"`
|
|
LastSuccessfulTime *time.Time `json:"lastSuccessfulTime,omitempty"`
|
|
StartTime *time.Time `json:"startTime,omitempty"`
|
|
CompletionTime *time.Time `json:"completionTime,omitempty"`
|
|
ClassName string `json:"className,omitempty"`
|
|
Hosts []string `json:"hosts,omitempty"`
|
|
Addresses []string `json:"addresses,omitempty"`
|
|
AddressType string `json:"addressType,omitempty"`
|
|
EndpointCount int `json:"endpointCount,omitempty"`
|
|
ReadyEndpointCount int `json:"readyEndpointCount,omitempty"`
|
|
EndpointPorts []K8sEndpointPort `json:"endpointPorts,omitempty"`
|
|
PolicyTypes []string `json:"policyTypes,omitempty"`
|
|
IngressRuleCount int `json:"ingressRuleCount,omitempty"`
|
|
EgressRuleCount int `json:"egressRuleCount,omitempty"`
|
|
Phase string `json:"phase,omitempty"`
|
|
StorageClass string `json:"storageClass,omitempty"`
|
|
Provisioner string `json:"provisioner,omitempty"`
|
|
VolumeBindingMode string `json:"volumeBindingMode,omitempty"`
|
|
AllowVolumeExpansion *bool `json:"allowVolumeExpansion,omitempty"`
|
|
ParameterKeys []string `json:"parameterKeys,omitempty"`
|
|
DataKeys []string `json:"dataKeys,omitempty"`
|
|
BinaryDataKeys []string `json:"binaryDataKeys,omitempty"`
|
|
Immutable bool `json:"immutable,omitempty"`
|
|
MetadataOnly bool `json:"metadataOnly,omitempty"`
|
|
SecretType string `json:"secretType,omitempty"`
|
|
AutomountServiceAccountToken *bool `json:"automountServiceAccountToken,omitempty"`
|
|
SecretCount int `json:"secretCount,omitempty"`
|
|
ImagePullSecrets []string `json:"imagePullSecrets,omitempty"`
|
|
Hard map[string]string `json:"hard,omitempty"`
|
|
Used map[string]string `json:"used,omitempty"`
|
|
LimitTypes []string `json:"limitTypes,omitempty"`
|
|
MinAvailable string `json:"minAvailable,omitempty"`
|
|
MaxUnavailable string `json:"maxUnavailable,omitempty"`
|
|
DesiredHealthy int32 `json:"desiredHealthy,omitempty"`
|
|
CurrentHealthy int32 `json:"currentHealthy,omitempty"`
|
|
DisruptionsAllowed int32 `json:"disruptionsAllowed,omitempty"`
|
|
ExpectedPods int32 `json:"expectedPods,omitempty"`
|
|
TargetKind string `json:"targetKind,omitempty"`
|
|
TargetName string `json:"targetName,omitempty"`
|
|
MinReplicas int32 `json:"minReplicas,omitempty"`
|
|
MaxReplicas int32 `json:"maxReplicas,omitempty"`
|
|
MetricTypes []string `json:"metricTypes,omitempty"`
|
|
CapacityBytes int64 `json:"capacityBytes,omitempty"`
|
|
RequestedBytes int64 `json:"requestedBytes,omitempty"`
|
|
AccessModes []string `json:"accessModes,omitempty"`
|
|
ReclaimPolicy string `json:"reclaimPolicy,omitempty"`
|
|
ClaimNamespace string `json:"claimNamespace,omitempty"`
|
|
ClaimName string `json:"claimName,omitempty"`
|
|
VolumeName string `json:"volumeName,omitempty"`
|
|
EventType string `json:"eventType,omitempty"`
|
|
Reason string `json:"reason,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
InvolvedKind string `json:"involvedKind,omitempty"`
|
|
InvolvedName string `json:"involvedName,omitempty"`
|
|
Count int32 `json:"count,omitempty"`
|
|
FirstSeen *time.Time `json:"firstSeen,omitempty"`
|
|
EventTime *time.Time `json:"eventTime,omitempty"`
|
|
CreatedAt *time.Time `json:"createdAt,omitempty"`
|
|
MetricCapabilities *K8sMetricCapabilities `json:"metricCapabilities,omitempty"`
|
|
}
|
|
|
|
// K8sServicePort describes a Kubernetes service port.
|
|
type K8sServicePort struct {
|
|
Name string `json:"name,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
Port int32 `json:"port,omitempty"`
|
|
TargetPort string `json:"targetPort,omitempty"`
|
|
NodePort int32 `json:"nodePort,omitempty"`
|
|
}
|
|
|
|
// K8sEndpointPort describes a Kubernetes EndpointSlice port.
|
|
type K8sEndpointPort struct {
|
|
Name string `json:"name,omitempty"`
|
|
Protocol string `json:"protocol,omitempty"`
|
|
Port int32 `json:"port,omitempty"`
|
|
AppProtocol string `json:"appProtocol,omitempty"`
|
|
}
|
|
|
|
// K8sPodContainer describes a container within a Kubernetes pod.
|
|
type K8sPodContainer struct {
|
|
Name string `json:"name"`
|
|
Image string `json:"image,omitempty"`
|
|
Ready bool `json:"ready"`
|
|
RestartCount int32 `json:"restartCount,omitempty"`
|
|
State string `json:"state,omitempty"`
|
|
Reason string `json:"reason,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
}
|
|
|
|
// CPUInfo describes CPU characteristics.
|
|
type CPUInfo struct {
|
|
Model string `json:"model,omitempty"`
|
|
Cores int `json:"cores,omitempty"`
|
|
Sockets int `json:"sockets,omitempty"`
|
|
}
|
|
|
|
// NetworkInterface describes a network interface.
|
|
type NetworkInterface struct {
|
|
Name string `json:"name"`
|
|
MAC string `json:"mac,omitempty"`
|
|
Addresses []string `json:"addresses,omitempty"`
|
|
RXBytes uint64 `json:"rxBytes,omitempty"`
|
|
TXBytes uint64 `json:"txBytes,omitempty"`
|
|
SpeedMbps *int64 `json:"speedMbps,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
}
|
|
|
|
// DiskInfo describes disk usage.
|
|
type DiskInfo struct {
|
|
Device string `json:"device,omitempty"`
|
|
Mountpoint string `json:"mountpoint,omitempty"`
|
|
Filesystem string `json:"filesystem,omitempty"`
|
|
Total int64 `json:"total,omitempty"`
|
|
Used int64 `json:"used,omitempty"`
|
|
Free int64 `json:"free,omitempty"`
|
|
Usage float64 `json:"usage,omitempty"`
|
|
}
|
|
|
|
// DockerSwarmInfo captures Docker Swarm details.
|
|
type DockerSwarmInfo struct {
|
|
NodeID string `json:"nodeId,omitempty"`
|
|
NodeRole string `json:"nodeRole,omitempty"`
|
|
LocalState string `json:"localState,omitempty"`
|
|
ControlAvailable bool `json:"controlAvailable,omitempty"`
|
|
ClusterID string `json:"clusterId,omitempty"`
|
|
ClusterName string `json:"clusterName,omitempty"`
|
|
Scope string `json:"scope,omitempty"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|
|
|
|
// ResourceStats contains aggregated stats for a set of resources.
|
|
type ResourceStats struct {
|
|
Total int `json:"total"`
|
|
ByType map[ResourceType]int `json:"byType"`
|
|
ByStatus map[ResourceStatus]int `json:"byStatus"`
|
|
BySource map[DataSource]int `json:"bySource"`
|
|
PolicyPosture *ResourcePolicyPostureSummary `json:"policyPosture,omitempty"`
|
|
}
|