decoders.go 32 KB

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