decoders.go 31 KB

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