decoders.go 31 KB

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