decoders.go 31 KB

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