decoders.go 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336
  1. package source
  2. import (
  3. "github.com/opencost/opencost/core/pkg/util"
  4. )
  5. const (
  6. ClusterIDLabel = "cluster_id"
  7. NamespaceLabel = "namespace"
  8. NodeLabel = "node"
  9. InstanceLabel = "instance"
  10. InstanceTypeLabel = "instance_type"
  11. ContainerLabel = "container"
  12. PodLabel = "pod"
  13. ProviderIDLabel = "provider_id"
  14. DeviceLabel = "device"
  15. PVCLabel = "persistentvolumeclaim"
  16. PVLabel = "persistentvolume"
  17. StorageClassLabel = "storageclass"
  18. VolumeNameLabel = "volumename"
  19. ServiceLabel = "service"
  20. ServiceNameLabel = "service_name"
  21. IngressIPLabel = "ingress_ip"
  22. ProvisionerNameLabel = "provisioner_name"
  23. UIDLabel = "uid"
  24. KubernetesNodeLabel = "kubernetes_node"
  25. ModeLabel = "mode"
  26. ModelNameLabel = "modelName"
  27. UUIDLabel = "UUID"
  28. ResourceLabel = "resource"
  29. DeploymentLabel = "deployment"
  30. StatefulSetLabel = "statefulSet"
  31. ReplicaSetLabel = "replicaset"
  32. OwnerNameLabel = "owner_name"
  33. OwnerKindLabel = "owner_kind"
  34. UnitLabel = "unit"
  35. InternetLabel = "internet"
  36. SameZoneLabel = "same_zone"
  37. SameRegionLabel = "same_region"
  38. )
  39. type PVResult struct {
  40. Cluster string
  41. PersistentVolume string
  42. }
  43. type PVUsedAvgResult struct {
  44. Cluster string
  45. Namespace string
  46. PersistentVolumeClaim string
  47. Data []*util.Vector
  48. }
  49. func DecodePVUsedAvgResult(result *QueryResult) *PVUsedAvgResult {
  50. cluster, _ := result.GetCluster()
  51. namespace, _ := result.GetNamespace()
  52. pvc, _ := result.GetString(PVCLabel)
  53. return &PVUsedAvgResult{
  54. Cluster: cluster,
  55. Namespace: namespace,
  56. PersistentVolumeClaim: pvc,
  57. Data: result.Values,
  58. }
  59. }
  60. type PVActiveMinutesResult struct {
  61. Cluster string
  62. PersistentVolume string
  63. Data []*util.Vector
  64. }
  65. func DecodePVActiveMinutesResult(result *QueryResult) *PVActiveMinutesResult {
  66. cluster, _ := result.GetCluster()
  67. pv, _ := result.GetString(PVLabel)
  68. return &PVActiveMinutesResult{
  69. Cluster: cluster,
  70. PersistentVolume: pv,
  71. Data: result.Values,
  72. }
  73. }
  74. type PVUsedMaxResult struct {
  75. Cluster string
  76. Namespace string
  77. PersistentVolumeClaim string
  78. Data []*util.Vector
  79. }
  80. func DecodePVUsedMaxResult(result *QueryResult) *PVUsedMaxResult {
  81. cluster, _ := result.GetCluster()
  82. namespace, _ := result.GetNamespace()
  83. pvc, _ := result.GetString(PVCLabel)
  84. return &PVUsedMaxResult{
  85. Cluster: cluster,
  86. Namespace: namespace,
  87. PersistentVolumeClaim: pvc,
  88. Data: result.Values,
  89. }
  90. }
  91. type LocalStorageActiveMinutesResult struct {
  92. Cluster string
  93. Node string
  94. ProviderID string
  95. Data []*util.Vector
  96. }
  97. func DecodeLocalStorageActiveMinutesResult(result *QueryResult) *LocalStorageActiveMinutesResult {
  98. cluster, _ := result.GetCluster()
  99. node, _ := result.GetNode()
  100. if node == "" {
  101. node, _ = result.GetInstance()
  102. }
  103. providerId, _ := result.GetProviderID()
  104. return &LocalStorageActiveMinutesResult{
  105. Cluster: cluster,
  106. Node: node,
  107. ProviderID: providerId,
  108. Data: result.Values,
  109. }
  110. }
  111. type LocalStorageCostResult struct {
  112. Cluster string
  113. Instance string
  114. Device string
  115. Data []*util.Vector
  116. }
  117. func DecodeLocalStorageCostResult(result *QueryResult) *LocalStorageCostResult {
  118. cluster, _ := result.GetCluster()
  119. instance, _ := result.GetInstance()
  120. device, _ := result.GetDevice()
  121. return &LocalStorageCostResult{
  122. Cluster: cluster,
  123. Instance: instance,
  124. Device: device,
  125. Data: result.Values,
  126. }
  127. }
  128. type LocalStorageUsedCostResult struct {
  129. Cluster string
  130. Instance string
  131. Device string
  132. Data []*util.Vector
  133. }
  134. func DecodeLocalStorageUsedCostResult(result *QueryResult) *LocalStorageUsedCostResult {
  135. cluster, _ := result.GetCluster()
  136. instance, _ := result.GetInstance()
  137. device, _ := result.GetDevice()
  138. return &LocalStorageUsedCostResult{
  139. Cluster: cluster,
  140. Instance: instance,
  141. Device: device,
  142. Data: result.Values,
  143. }
  144. }
  145. type LocalStorageUsedAvgResult struct {
  146. Cluster string
  147. Instance string
  148. Device string
  149. Data []*util.Vector
  150. }
  151. func DecodeLocalStorageUsedAvgResult(result *QueryResult) *LocalStorageUsedAvgResult {
  152. cluster, _ := result.GetCluster()
  153. instance, _ := result.GetInstance()
  154. device, _ := result.GetDevice()
  155. return &LocalStorageUsedAvgResult{
  156. Cluster: cluster,
  157. Instance: instance,
  158. Device: device,
  159. Data: result.Values,
  160. }
  161. }
  162. type LocalStorageUsedMaxResult struct {
  163. Cluster string
  164. Instance string
  165. Device string
  166. Data []*util.Vector
  167. }
  168. func DecodeLocalStorageUsedMaxResult(result *QueryResult) *LocalStorageUsedMaxResult {
  169. cluster, _ := result.GetCluster()
  170. instance, _ := result.GetInstance()
  171. device, _ := result.GetDevice()
  172. return &LocalStorageUsedMaxResult{
  173. Cluster: cluster,
  174. Instance: instance,
  175. Device: device,
  176. Data: result.Values,
  177. }
  178. }
  179. type LocalStorageBytesResult struct {
  180. Cluster string
  181. Instance string
  182. Device string
  183. Data []*util.Vector
  184. }
  185. func DecodeLocalStorageBytesResult(result *QueryResult) *LocalStorageBytesResult {
  186. cluster, _ := result.GetCluster()
  187. instance, _ := result.GetInstance()
  188. device, _ := result.GetDevice()
  189. return &LocalStorageBytesResult{
  190. Cluster: cluster,
  191. Instance: instance,
  192. Device: device,
  193. Data: result.Values,
  194. }
  195. }
  196. type NodeActiveMinutesResult struct {
  197. Cluster string
  198. Node string
  199. ProviderID string
  200. Data []*util.Vector
  201. }
  202. func DecodeNodeActiveMinutesResult(result *QueryResult) *NodeActiveMinutesResult {
  203. cluster, _ := result.GetCluster()
  204. node, _ := result.GetNode()
  205. providerId, _ := result.GetProviderID()
  206. return &NodeActiveMinutesResult{
  207. Cluster: cluster,
  208. Node: node,
  209. ProviderID: providerId,
  210. Data: result.Values,
  211. }
  212. }
  213. type NodeCPUCoresCapacityResult struct {
  214. Cluster string
  215. Node string
  216. Data []*util.Vector
  217. }
  218. func DecodeNodeCPUCoresCapacityResult(result *QueryResult) *NodeCPUCoresCapacityResult {
  219. cluster, _ := result.GetCluster()
  220. node, _ := result.GetNode()
  221. return &NodeCPUCoresCapacityResult{
  222. Cluster: cluster,
  223. Node: node,
  224. Data: result.Values,
  225. }
  226. }
  227. type NodeCPUCoresAllocatableResult = NodeCPUCoresCapacityResult
  228. func DecodeNodeCPUCoresAllocatableResult(result *QueryResult) *NodeCPUCoresAllocatableResult {
  229. return DecodeNodeCPUCoresCapacityResult(result)
  230. }
  231. type NodeRAMBytesCapacityResult struct {
  232. Cluster string
  233. Node string
  234. Data []*util.Vector
  235. }
  236. func DecodeNodeRAMBytesCapacityResult(result *QueryResult) *NodeRAMBytesCapacityResult {
  237. cluster, _ := result.GetCluster()
  238. node, _ := result.GetNode()
  239. return &NodeRAMBytesCapacityResult{
  240. Cluster: cluster,
  241. Node: node,
  242. Data: result.Values,
  243. }
  244. }
  245. type NodeRAMBytesAllocatableResult = NodeRAMBytesCapacityResult
  246. func DecodeNodeRAMBytesAllocatableResult(result *QueryResult) *NodeRAMBytesAllocatableResult {
  247. return DecodeNodeRAMBytesCapacityResult(result)
  248. }
  249. type NodeGPUCountResult struct {
  250. Cluster string
  251. Node string
  252. ProviderID string
  253. Data []*util.Vector
  254. }
  255. func DecodeNodeGPUCountResult(result *QueryResult) *NodeGPUCountResult {
  256. cluster, _ := result.GetCluster()
  257. node, _ := result.GetNode()
  258. providerId, _ := result.GetProviderID()
  259. return &NodeGPUCountResult{
  260. Cluster: cluster,
  261. Node: node,
  262. ProviderID: providerId,
  263. Data: result.Values,
  264. }
  265. }
  266. type NodeCPUModeTotalResult struct {
  267. Cluster string
  268. Node string
  269. Mode string
  270. Data []*util.Vector
  271. }
  272. func DecodeNodeCPUModeTotalResult(result *QueryResult) *NodeCPUModeTotalResult {
  273. cluster, _ := result.GetCluster()
  274. node, _ := result.GetString(KubernetesNodeLabel)
  275. mode, _ := result.GetString(ModeLabel)
  276. return &NodeCPUModeTotalResult{
  277. Cluster: cluster,
  278. Node: node,
  279. Mode: mode,
  280. Data: result.Values,
  281. }
  282. }
  283. type NodeIsSpotResult struct {
  284. Cluster string
  285. Node string
  286. ProviderID string
  287. Data []*util.Vector
  288. }
  289. func DecodeNodeIsSpotResult(result *QueryResult) *NodeIsSpotResult {
  290. cluster, _ := result.GetCluster()
  291. node, _ := result.GetNode()
  292. providerId, _ := result.GetProviderID()
  293. return &NodeIsSpotResult{
  294. Cluster: cluster,
  295. Node: node,
  296. ProviderID: providerId,
  297. Data: result.Values,
  298. }
  299. }
  300. type NodeRAMSystemPercentResult struct {
  301. Cluster string
  302. Instance string
  303. Data []*util.Vector
  304. }
  305. func DecodeNodeRAMSystemPercentResult(result *QueryResult) *NodeRAMSystemPercentResult {
  306. cluster, _ := result.GetCluster()
  307. instance, _ := result.GetInstance()
  308. return &NodeRAMSystemPercentResult{
  309. Cluster: cluster,
  310. Instance: instance,
  311. Data: result.Values,
  312. }
  313. }
  314. type NodeRAMUserPercentResult = NodeRAMSystemPercentResult
  315. func DecodeNodeRAMUserPercentResult(result *QueryResult) *NodeRAMUserPercentResult {
  316. return DecodeNodeRAMSystemPercentResult(result)
  317. }
  318. type LBActiveMinutesResult struct {
  319. Cluster string
  320. Namespace string
  321. Service string
  322. IngressIP string
  323. Data []*util.Vector
  324. }
  325. func DecodeLBActiveMinutesResult(result *QueryResult) *LBActiveMinutesResult {
  326. cluster, _ := result.GetCluster()
  327. namespace, _ := result.GetNamespace()
  328. service, _ := result.GetString(ServiceNameLabel)
  329. ingressIp, _ := result.GetString(IngressIPLabel)
  330. return &LBActiveMinutesResult{
  331. Cluster: cluster,
  332. Namespace: namespace,
  333. Service: service,
  334. IngressIP: ingressIp,
  335. Data: result.Values,
  336. }
  337. }
  338. type LBPricePerHrResult = LBActiveMinutesResult
  339. func DecodeLBPricePerHrResult(result *QueryResult) *LBPricePerHrResult {
  340. return DecodeLBActiveMinutesResult(result)
  341. }
  342. type ClusterManagementDurationResult struct {
  343. Cluster string
  344. Provisioner string
  345. Data []*util.Vector
  346. }
  347. func DecodeClusterManagementDurationResult(result *QueryResult) *ClusterManagementDurationResult {
  348. cluster, _ := result.GetCluster()
  349. provisioner, _ := result.GetString(ProvisionerNameLabel)
  350. return &ClusterManagementDurationResult{
  351. Cluster: cluster,
  352. Provisioner: provisioner,
  353. Data: result.Values,
  354. }
  355. }
  356. type ClusterManagementPricePerHrResult = ClusterManagementDurationResult
  357. func DecodeClusterManagementPricePerHrResult(result *QueryResult) *ClusterManagementPricePerHrResult {
  358. return DecodeClusterManagementDurationResult(result)
  359. }
  360. type PodsResult struct {
  361. UID string
  362. Cluster string
  363. Namespace string
  364. Pod string
  365. Data []*util.Vector
  366. }
  367. func DecodePodsResult(result *QueryResult) *PodsResult {
  368. uid, _ := result.GetString(UIDLabel)
  369. cluster, _ := result.GetCluster()
  370. namespace, _ := result.GetNamespace()
  371. pod, _ := result.GetPod()
  372. return &PodsResult{
  373. UID: uid,
  374. Cluster: cluster,
  375. Namespace: namespace,
  376. Pod: pod,
  377. Data: result.Values,
  378. }
  379. }
  380. type ContainerMetricResult struct {
  381. Cluster string
  382. Node string
  383. Instance string
  384. Namespace string
  385. Pod string
  386. Container string
  387. Data []*util.Vector
  388. }
  389. func DecodeContainerMetricResult(result *QueryResult) *ContainerMetricResult {
  390. cluster, _ := result.GetCluster()
  391. node, _ := result.GetNode()
  392. instance, _ := result.GetInstance()
  393. // NOTE: this addresses cases where the node isn't set, but the instance is,
  394. // NOTE: we just inherit the instance as the node
  395. if node == "" {
  396. node = instance
  397. }
  398. namespace, _ := result.GetNamespace()
  399. pod, _ := result.GetPod()
  400. container, _ := result.GetContainer()
  401. return &ContainerMetricResult{
  402. Cluster: cluster,
  403. Node: node,
  404. Instance: instance,
  405. Namespace: namespace,
  406. Pod: pod,
  407. Container: container,
  408. Data: result.Values,
  409. }
  410. }
  411. type RAMBytesAllocatedResult = ContainerMetricResult
  412. func DecodeRAMBytesAllocatedResult(result *QueryResult) *RAMBytesAllocatedResult {
  413. return DecodeContainerMetricResult(result)
  414. }
  415. type RAMRequestsResult = ContainerMetricResult
  416. func DecodeRAMRequestsResult(result *QueryResult) *RAMRequestsResult {
  417. return DecodeContainerMetricResult(result)
  418. }
  419. type RAMUsageAvgResult = ContainerMetricResult
  420. func DecodeRAMUsageAvgResult(result *QueryResult) *RAMUsageAvgResult {
  421. return DecodeContainerMetricResult(result)
  422. }
  423. type RAMUsageMaxResult = ContainerMetricResult
  424. func DecodeRAMUsageMaxResult(result *QueryResult) *RAMUsageMaxResult {
  425. return DecodeContainerMetricResult(result)
  426. }
  427. type NodeRAMPricePerGiBHrResult struct {
  428. Cluster string
  429. Node string
  430. InstanceType string
  431. ProviderID string
  432. Data []*util.Vector
  433. }
  434. func DecodeNodeRAMPricePerGiBHrResult(result *QueryResult) *NodeRAMPricePerGiBHrResult {
  435. cluster, _ := result.GetCluster()
  436. node, _ := result.GetNode()
  437. instanceType, _ := result.GetInstanceType()
  438. providerId, _ := result.GetProviderID()
  439. return &NodeRAMPricePerGiBHrResult{
  440. Cluster: cluster,
  441. Node: node,
  442. InstanceType: instanceType,
  443. ProviderID: providerId,
  444. Data: result.Values,
  445. }
  446. }
  447. type CPUCoresAllocatedResult = ContainerMetricResult
  448. func DecodeCPUCoresAllocatedResult(result *QueryResult) *CPUCoresAllocatedResult {
  449. return DecodeContainerMetricResult(result)
  450. }
  451. type CPURequestsResult = ContainerMetricResult
  452. func DecodeCPURequestsResult(result *QueryResult) *CPURequestsResult {
  453. return DecodeContainerMetricResult(result)
  454. }
  455. type CPUUsageAvgResult = ContainerMetricResult
  456. func DecodeCPUUsageAvgResult(result *QueryResult) *CPUUsageAvgResult {
  457. return DecodeContainerMetricResult(result)
  458. }
  459. type CPUUsageMaxResult = ContainerMetricResult
  460. func DecodeCPUUsageMaxResult(result *QueryResult) *CPUUsageMaxResult {
  461. return DecodeContainerMetricResult(result)
  462. }
  463. type NodeCPUPricePerHrResult struct {
  464. Cluster string
  465. Node string
  466. InstanceType string
  467. ProviderID string
  468. Data []*util.Vector
  469. }
  470. func DecodeNodeCPUPricePerHrResult(result *QueryResult) *NodeCPUPricePerHrResult {
  471. cluster, _ := result.GetCluster()
  472. node, _ := result.GetNode()
  473. instanceType, _ := result.GetInstanceType()
  474. providerId, _ := result.GetProviderID()
  475. return &NodeCPUPricePerHrResult{
  476. Cluster: cluster,
  477. Node: node,
  478. InstanceType: instanceType,
  479. ProviderID: providerId,
  480. Data: result.Values,
  481. }
  482. }
  483. // type alias requested result to allocated result, as you can only request a full GPU
  484. type GPUsRequestedResult = GPUsAllocatedResult
  485. func DecodeGPUsRequestedResult(result *QueryResult) *GPUsRequestedResult {
  486. return DecodeGPUsAllocatedResult(result)
  487. }
  488. type GPUsAllocatedResult struct {
  489. Cluster string
  490. Namespace string
  491. Pod string
  492. Container string
  493. Data []*util.Vector
  494. }
  495. func DecodeGPUsAllocatedResult(result *QueryResult) *GPUsAllocatedResult {
  496. cluster, _ := result.GetCluster()
  497. namespace, _ := result.GetNamespace()
  498. pod, _ := result.GetPod()
  499. container, _ := result.GetContainer()
  500. return &GPUsAllocatedResult{
  501. Cluster: cluster,
  502. Namespace: namespace,
  503. Pod: pod,
  504. Container: container,
  505. Data: result.Values,
  506. }
  507. }
  508. type GPUsUsageAvgResult struct {
  509. Cluster string
  510. Namespace string
  511. Pod string
  512. Container string
  513. Data []*util.Vector
  514. }
  515. func DecodeGPUsUsageAvgResult(result *QueryResult) *GPUsUsageAvgResult {
  516. cluster, _ := result.GetCluster()
  517. namespace, _ := result.GetNamespace()
  518. pod, _ := result.GetPod()
  519. container, _ := result.GetContainer()
  520. return &GPUsUsageAvgResult{
  521. Cluster: cluster,
  522. Namespace: namespace,
  523. Pod: pod,
  524. Container: container,
  525. Data: result.Values,
  526. }
  527. }
  528. type GPUsUsageMaxResult struct {
  529. Cluster string
  530. Namespace string
  531. Pod string
  532. Container string
  533. Data []*util.Vector
  534. }
  535. func DecodeGPUsUsageMaxResult(result *QueryResult) *GPUsUsageMaxResult {
  536. cluster, _ := result.GetCluster()
  537. namespace, _ := result.GetNamespace()
  538. pod, _ := result.GetPod()
  539. container, _ := result.GetContainer()
  540. return &GPUsUsageMaxResult{
  541. Cluster: cluster,
  542. Namespace: namespace,
  543. Pod: pod,
  544. Container: container,
  545. Data: result.Values,
  546. }
  547. }
  548. type NodeGPUPricePerHrResult struct {
  549. Cluster string
  550. Node string
  551. InstanceType string
  552. ProviderID string
  553. Data []*util.Vector
  554. }
  555. func DecodeNodeGPUPricePerHrResult(result *QueryResult) *NodeGPUPricePerHrResult {
  556. cluster, _ := result.GetCluster()
  557. node, _ := result.GetNode()
  558. instanceType, _ := result.GetInstanceType()
  559. providerId, _ := result.GetProviderID()
  560. return &NodeGPUPricePerHrResult{
  561. Cluster: cluster,
  562. Node: node,
  563. InstanceType: instanceType,
  564. ProviderID: providerId,
  565. Data: result.Values,
  566. }
  567. }
  568. type GPUInfoResult struct {
  569. Cluster string
  570. Namespace string
  571. Pod string
  572. Container string
  573. Device string
  574. ModelName string
  575. UUID string
  576. Data []*util.Vector
  577. }
  578. func DecodeGPUInfoResult(result *QueryResult) *GPUInfoResult {
  579. cluster, _ := result.GetCluster()
  580. namespace, _ := result.GetNamespace()
  581. pod, _ := result.GetPod()
  582. container, _ := result.GetContainer()
  583. device, _ := result.GetString(DeviceLabel)
  584. modelName, _ := result.GetString(ModelNameLabel)
  585. uuid, _ := result.GetString(UUIDLabel)
  586. return &GPUInfoResult{
  587. Cluster: cluster,
  588. Namespace: namespace,
  589. Pod: pod,
  590. Container: container,
  591. Device: device,
  592. ModelName: modelName,
  593. UUID: uuid,
  594. Data: result.Values,
  595. }
  596. }
  597. type IsGPUSharedResult struct {
  598. Cluster string
  599. Namespace string
  600. Pod string
  601. Container string
  602. Resource string
  603. Data []*util.Vector
  604. }
  605. func DecodeIsGPUSharedResult(result *QueryResult) *IsGPUSharedResult {
  606. cluster, _ := result.GetCluster()
  607. namespace, _ := result.GetNamespace()
  608. pod, _ := result.GetPod()
  609. container, _ := result.GetContainer()
  610. resource, _ := result.GetString(ResourceLabel)
  611. return &IsGPUSharedResult{
  612. Cluster: cluster,
  613. Namespace: namespace,
  614. Pod: pod,
  615. Container: container,
  616. Resource: resource,
  617. Data: result.Values,
  618. }
  619. }
  620. type PodPVCAllocationResult struct {
  621. Cluster string
  622. Namespace string
  623. Pod string
  624. PersistentVolume string
  625. PersistentVolumeClaim string
  626. Data []*util.Vector
  627. }
  628. func DecodePodPVCAllocationResult(result *QueryResult) *PodPVCAllocationResult {
  629. cluster, _ := result.GetCluster()
  630. namespace, _ := result.GetNamespace()
  631. pod, _ := result.GetPod()
  632. pv, _ := result.GetString(PVLabel)
  633. pvc, _ := result.GetString(PVCLabel)
  634. return &PodPVCAllocationResult{
  635. Cluster: cluster,
  636. Namespace: namespace,
  637. Pod: pod,
  638. PersistentVolume: pv,
  639. PersistentVolumeClaim: pvc,
  640. Data: result.Values,
  641. }
  642. }
  643. type PVCBytesRequestedResult struct {
  644. Cluster string
  645. Namespace string
  646. PersistentVolumeClaim string
  647. Data []*util.Vector
  648. }
  649. func DecodePVCBytesRequestedResult(result *QueryResult) *PVCBytesRequestedResult {
  650. cluster, _ := result.GetCluster()
  651. namespace, _ := result.GetNamespace()
  652. pvc, _ := result.GetString(PVCLabel)
  653. return &PVCBytesRequestedResult{
  654. Cluster: cluster,
  655. Namespace: namespace,
  656. PersistentVolumeClaim: pvc,
  657. Data: result.Values,
  658. }
  659. }
  660. type PVCInfoResult struct {
  661. Cluster string
  662. Namespace string
  663. VolumeName string
  664. PersistentVolumeClaim string
  665. StorageClass string
  666. Data []*util.Vector
  667. }
  668. func DecodePVCInfoResult(result *QueryResult) *PVCInfoResult {
  669. cluster, _ := result.GetCluster()
  670. namespace, _ := result.GetNamespace()
  671. volumeName, _ := result.GetString(VolumeNameLabel)
  672. pvc, _ := result.GetString(PVCLabel)
  673. storageClass, _ := result.GetString(StorageClassLabel)
  674. return &PVCInfoResult{
  675. Cluster: cluster,
  676. Namespace: namespace,
  677. VolumeName: volumeName,
  678. PersistentVolumeClaim: pvc,
  679. StorageClass: storageClass,
  680. Data: result.Values,
  681. }
  682. }
  683. type PVBytesResult struct {
  684. Cluster string
  685. PersistentVolume string
  686. Data []*util.Vector
  687. }
  688. func DecodePVBytesResult(result *QueryResult) *PVBytesResult {
  689. cluster, _ := result.GetCluster()
  690. pv, _ := result.GetString(PVLabel)
  691. return &PVBytesResult{
  692. Cluster: cluster,
  693. PersistentVolume: pv,
  694. Data: result.Values,
  695. }
  696. }
  697. type PVPricePerGiBHourResult struct {
  698. Cluster string
  699. VolumeName string
  700. PersistentVolume string
  701. ProviderID string
  702. Data []*util.Vector
  703. }
  704. func DecodePVPricePerGiBHourResult(result *QueryResult) *PVPricePerGiBHourResult {
  705. cluster, _ := result.GetCluster()
  706. volumeName, _ := result.GetString(VolumeNameLabel)
  707. pv, _ := result.GetString(PVLabel)
  708. providerId, _ := result.GetProviderID()
  709. return &PVPricePerGiBHourResult{
  710. Cluster: cluster,
  711. VolumeName: volumeName,
  712. PersistentVolume: pv,
  713. ProviderID: providerId,
  714. Data: result.Values,
  715. }
  716. }
  717. type PVInfoResult struct {
  718. Cluster string
  719. PersistentVolume string
  720. StorageClass string
  721. ProviderID string
  722. Data []*util.Vector
  723. }
  724. func DecodePVInfoResult(result *QueryResult) *PVInfoResult {
  725. cluster, _ := result.GetCluster()
  726. storageClass, _ := result.GetString(StorageClassLabel)
  727. providerId, _ := result.GetProviderID()
  728. pv, _ := result.GetString(PVLabel)
  729. return &PVInfoResult{
  730. Cluster: cluster,
  731. PersistentVolume: pv,
  732. StorageClass: storageClass,
  733. ProviderID: providerId,
  734. Data: result.Values,
  735. }
  736. }
  737. // Base type for network usage results
  738. type NetworkGiBResult struct {
  739. Cluster string
  740. Namespace string
  741. Pod string
  742. Service string
  743. Data []*util.Vector
  744. }
  745. func DecodeNetworkGiBResult(result *QueryResult) *NetworkGiBResult {
  746. cluster, _ := result.GetCluster()
  747. namespace, _ := result.GetNamespace()
  748. pod, _ := result.GetPod()
  749. service, _ := result.GetString(ServiceLabel)
  750. return &NetworkGiBResult{
  751. Cluster: cluster,
  752. Namespace: namespace,
  753. Pod: pod,
  754. Service: service,
  755. Data: result.Values,
  756. }
  757. }
  758. // Base type for network price results
  759. type NetworkPricePerGiBResult struct {
  760. Cluster string
  761. Data []*util.Vector
  762. }
  763. func DecodeNetworkPricePerGiBResult(result *QueryResult) *NetworkPricePerGiBResult {
  764. cluster, _ := result.GetCluster()
  765. return &NetworkPricePerGiBResult{
  766. Cluster: cluster,
  767. Data: result.Values,
  768. }
  769. }
  770. // Type alias the specific network subclassification results AND price results
  771. type NetZoneGiBResult = NetworkGiBResult
  772. type NetZonePricePerGiBResult = NetworkPricePerGiBResult
  773. type NetRegionGiBResult = NetworkGiBResult
  774. type NetRegionPricePerGiBResult = NetworkPricePerGiBResult
  775. type NetInternetGiBResult = NetworkGiBResult
  776. type NetInternetPricePerGiBResult = NetworkPricePerGiBResult
  777. type NetInternetServiceGiBResult = NetworkGiBResult
  778. type NetZoneIngressGiBResult = NetworkGiBResult
  779. type NetRegionIngressGiBResult = NetworkGiBResult
  780. type NetInternetIngressGiBResult = NetworkGiBResult
  781. type NetInternetServiceIngressGiBResult = NetworkGiBResult
  782. func DecodeNetZoneGiBResult(result *QueryResult) *NetZoneGiBResult {
  783. return DecodeNetworkGiBResult(result)
  784. }
  785. func DecodeNetZonePricePerGiBResult(result *QueryResult) *NetZonePricePerGiBResult {
  786. return DecodeNetworkPricePerGiBResult(result)
  787. }
  788. func DecodeNetRegionGiBResult(result *QueryResult) *NetRegionGiBResult {
  789. return DecodeNetworkGiBResult(result)
  790. }
  791. func DecodeNetRegionPricePerGiBResult(result *QueryResult) *NetRegionPricePerGiBResult {
  792. return DecodeNetworkPricePerGiBResult(result)
  793. }
  794. func DecodeNetInternetGiBResult(result *QueryResult) *NetInternetGiBResult {
  795. return DecodeNetworkGiBResult(result)
  796. }
  797. func DecodeNetInternetPricePerGiBResult(result *QueryResult) *NetInternetPricePerGiBResult {
  798. return DecodeNetworkPricePerGiBResult(result)
  799. }
  800. func DecodeNetInternetServiceGiBResult(result *QueryResult) *NetInternetServiceGiBResult {
  801. return DecodeNetworkGiBResult(result)
  802. }
  803. func DecodeNetZoneIngressGiBResult(result *QueryResult) *NetZoneIngressGiBResult {
  804. return DecodeNetworkGiBResult(result)
  805. }
  806. func DecodeNetRegionIngressGiBResult(result *QueryResult) *NetRegionIngressGiBResult {
  807. return DecodeNetworkGiBResult(result)
  808. }
  809. func DecodeNetInternetIngressGiBResult(result *QueryResult) *NetInternetIngressGiBResult {
  810. return DecodeNetworkGiBResult(result)
  811. }
  812. func DecodeNetInternetServiceIngressGiBResult(result *QueryResult) *NetInternetServiceIngressGiBResult {
  813. return DecodeNetworkGiBResult(result)
  814. }
  815. type NetReceiveBytesResult struct {
  816. Cluster string
  817. Namespace string
  818. Pod string
  819. Container string
  820. Data []*util.Vector
  821. }
  822. func DecodeNetReceiveBytesResult(result *QueryResult) *NetReceiveBytesResult {
  823. cluster, _ := result.GetCluster()
  824. namespace, _ := result.GetNamespace()
  825. pod, _ := result.GetPod()
  826. container, _ := result.GetContainer()
  827. return &NetReceiveBytesResult{
  828. Cluster: cluster,
  829. Namespace: namespace,
  830. Pod: pod,
  831. Container: container,
  832. Data: result.Values,
  833. }
  834. }
  835. type NetTransferBytesResult struct {
  836. Cluster string
  837. Namespace string
  838. Pod string
  839. Container string
  840. Data []*util.Vector
  841. }
  842. func DecodeNetTransferBytesResult(result *QueryResult) *NetTransferBytesResult {
  843. cluster, _ := result.GetCluster()
  844. namespace, _ := result.GetNamespace()
  845. pod, _ := result.GetPod()
  846. container, _ := result.GetContainer()
  847. return &NetTransferBytesResult{
  848. Cluster: cluster,
  849. Namespace: namespace,
  850. Pod: pod,
  851. Container: container,
  852. Data: result.Values,
  853. }
  854. }
  855. type NamespaceAnnotationsResult struct {
  856. Namespace string
  857. Annotations map[string]string
  858. Data []*util.Vector
  859. }
  860. func DecodeNamespaceAnnotationsResult(result *QueryResult) *NamespaceAnnotationsResult {
  861. namespace, _ := result.GetNamespace()
  862. annotations := result.GetAnnotations()
  863. return &NamespaceAnnotationsResult{
  864. Namespace: namespace,
  865. Annotations: annotations,
  866. Data: result.Values,
  867. }
  868. }
  869. type PodAnnotationsResult struct {
  870. Cluster string
  871. Namespace string
  872. Pod string
  873. Annotations map[string]string
  874. Data []*util.Vector
  875. }
  876. func DecodePodAnnotationsResult(result *QueryResult) *PodAnnotationsResult {
  877. cluster, _ := result.GetCluster()
  878. namespace, _ := result.GetNamespace()
  879. pod, _ := result.GetPod()
  880. annotations := result.GetAnnotations()
  881. return &PodAnnotationsResult{
  882. Cluster: cluster,
  883. Namespace: namespace,
  884. Pod: pod,
  885. Annotations: annotations,
  886. Data: result.Values,
  887. }
  888. }
  889. type NodeLabelsResult struct {
  890. Cluster string
  891. Node string
  892. Labels map[string]string
  893. Data []*util.Vector
  894. }
  895. func DecodeNodeLabelsResult(result *QueryResult) *NodeLabelsResult {
  896. cluster, _ := result.GetCluster()
  897. node, _ := result.GetNode()
  898. labels := result.GetLabels()
  899. return &NodeLabelsResult{
  900. Cluster: cluster,
  901. Node: node,
  902. Labels: labels,
  903. Data: result.Values,
  904. }
  905. }
  906. type NamespaceLabelsResult struct {
  907. Cluster string
  908. Namespace string
  909. Labels map[string]string
  910. Data []*util.Vector
  911. }
  912. func DecodeNamespaceLabelsResult(result *QueryResult) *NamespaceLabelsResult {
  913. cluster, _ := result.GetCluster()
  914. namespace, _ := result.GetNamespace()
  915. labels := result.GetLabels()
  916. return &NamespaceLabelsResult{
  917. Cluster: cluster,
  918. Namespace: namespace,
  919. Labels: labels,
  920. Data: result.Values,
  921. }
  922. }
  923. type PodLabelsResult struct {
  924. Cluster string
  925. Namespace string
  926. Pod string
  927. Labels map[string]string
  928. Data []*util.Vector
  929. }
  930. func DecodePodLabelsResult(result *QueryResult) *PodLabelsResult {
  931. cluster, _ := result.GetCluster()
  932. namespace, _ := result.GetNamespace()
  933. pod, _ := result.GetPod()
  934. labels := result.GetLabels()
  935. return &PodLabelsResult{
  936. Cluster: cluster,
  937. Namespace: namespace,
  938. Pod: pod,
  939. Labels: labels,
  940. Data: result.Values,
  941. }
  942. }
  943. type ServiceLabelsResult struct {
  944. Cluster string
  945. Namespace string
  946. Service string
  947. Labels map[string]string
  948. Data []*util.Vector
  949. }
  950. func DecodeServiceLabelsResult(result *QueryResult) *ServiceLabelsResult {
  951. cluster, _ := result.GetCluster()
  952. namespace, _ := result.GetNamespace()
  953. service, _ := result.GetString(ServiceLabel)
  954. labels := result.GetLabels()
  955. return &ServiceLabelsResult{
  956. Cluster: cluster,
  957. Namespace: namespace,
  958. Service: service,
  959. Labels: labels,
  960. Data: result.Values,
  961. }
  962. }
  963. type DeploymentLabelsResult struct {
  964. Cluster string
  965. Namespace string
  966. Deployment string
  967. Labels map[string]string
  968. Data []*util.Vector
  969. }
  970. func DecodeDeploymentLabelsResult(result *QueryResult) *DeploymentLabelsResult {
  971. cluster, _ := result.GetCluster()
  972. namespace, _ := result.GetNamespace()
  973. deployment, _ := result.GetString(DeploymentLabel)
  974. labels := result.GetLabels()
  975. return &DeploymentLabelsResult{
  976. Cluster: cluster,
  977. Namespace: namespace,
  978. Deployment: deployment,
  979. Labels: labels,
  980. Data: result.Values,
  981. }
  982. }
  983. type StatefulSetLabelsResult struct {
  984. Cluster string
  985. Namespace string
  986. StatefulSet string
  987. Labels map[string]string
  988. Data []*util.Vector
  989. }
  990. func DecodeStatefulSetLabelsResult(result *QueryResult) *StatefulSetLabelsResult {
  991. cluster, _ := result.GetCluster()
  992. namespace, _ := result.GetNamespace()
  993. statefulSet, _ := result.GetString(StatefulSetLabel)
  994. labels := result.GetLabels()
  995. return &StatefulSetLabelsResult{
  996. Cluster: cluster,
  997. Namespace: namespace,
  998. StatefulSet: statefulSet,
  999. Labels: labels,
  1000. Data: result.Values,
  1001. }
  1002. }
  1003. type DaemonSetLabelsResult struct {
  1004. Cluster string
  1005. Namespace string
  1006. Pod string
  1007. DaemonSet string
  1008. Labels map[string]string
  1009. Data []*util.Vector
  1010. }
  1011. func DecodeDaemonSetLabelsResult(result *QueryResult) *DaemonSetLabelsResult {
  1012. cluster, _ := result.GetCluster()
  1013. namespace, _ := result.GetNamespace()
  1014. pod, _ := result.GetPod()
  1015. daemonSet, _ := result.GetString(OwnerNameLabel)
  1016. labels := result.GetLabels()
  1017. return &DaemonSetLabelsResult{
  1018. Cluster: cluster,
  1019. Namespace: namespace,
  1020. Pod: pod,
  1021. DaemonSet: daemonSet,
  1022. Labels: labels,
  1023. Data: result.Values,
  1024. }
  1025. }
  1026. type JobLabelsResult struct {
  1027. Cluster string
  1028. Namespace string
  1029. Pod string
  1030. Job string
  1031. Labels map[string]string
  1032. Data []*util.Vector
  1033. }
  1034. func DecodeJobLabelsResult(result *QueryResult) *JobLabelsResult {
  1035. cluster, _ := result.GetCluster()
  1036. namespace, _ := result.GetNamespace()
  1037. pod, _ := result.GetPod()
  1038. job, _ := result.GetString(OwnerNameLabel)
  1039. labels := result.GetLabels()
  1040. return &JobLabelsResult{
  1041. Cluster: cluster,
  1042. Namespace: namespace,
  1043. Pod: pod,
  1044. Job: job,
  1045. Labels: labels,
  1046. Data: result.Values,
  1047. }
  1048. }
  1049. type PodsWithReplicaSetOwnerResult struct {
  1050. Cluster string
  1051. Namespace string
  1052. Pod string
  1053. ReplicaSet string
  1054. Data []*util.Vector
  1055. }
  1056. func DecodePodsWithReplicaSetOwnerResult(result *QueryResult) *PodsWithReplicaSetOwnerResult {
  1057. cluster, _ := result.GetCluster()
  1058. namespace, _ := result.GetNamespace()
  1059. replicaSet, _ := result.GetString(OwnerNameLabel)
  1060. pod, _ := result.GetPod()
  1061. return &PodsWithReplicaSetOwnerResult{
  1062. Cluster: cluster,
  1063. Namespace: namespace,
  1064. Pod: pod,
  1065. ReplicaSet: replicaSet,
  1066. Data: result.Values,
  1067. }
  1068. }
  1069. type ReplicaSetsWithoutOwnersResult struct {
  1070. Cluster string
  1071. Namespace string
  1072. ReplicaSet string
  1073. Data []*util.Vector
  1074. }
  1075. func DecodeReplicaSetsWithoutOwnersResult(result *QueryResult) *ReplicaSetsWithoutOwnersResult {
  1076. return &ReplicaSetsWithoutOwnersResult{
  1077. Data: result.Values,
  1078. }
  1079. }
  1080. type ReplicaSetsWithRolloutResult struct {
  1081. Cluster string
  1082. Namespace string
  1083. ReplicaSet string
  1084. OwnerName string
  1085. OwnerKind string
  1086. Data []*util.Vector
  1087. }
  1088. func DecodeReplicaSetsWithRolloutResult(result *QueryResult) *ReplicaSetsWithRolloutResult {
  1089. cluster, _ := result.GetCluster()
  1090. namespace, _ := result.GetNamespace()
  1091. replicaSet, _ := result.GetString(ReplicaSetLabel)
  1092. ownerName, _ := result.GetString(OwnerNameLabel)
  1093. ownerKind, _ := result.GetString(OwnerKindLabel)
  1094. return &ReplicaSetsWithRolloutResult{
  1095. Cluster: cluster,
  1096. Namespace: namespace,
  1097. ReplicaSet: replicaSet,
  1098. OwnerName: ownerName,
  1099. OwnerKind: ownerKind,
  1100. Data: result.Values,
  1101. }
  1102. }
  1103. func DecodeAll[T any](results []*QueryResult, decode ResultDecoder[T]) []*T {
  1104. decoded := make([]*T, 0, len(results))
  1105. for _, result := range results {
  1106. decoded = append(decoded, decode(result))
  1107. }
  1108. return decoded
  1109. }