2
0

decoders.go 29 KB

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