metricsquerier.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601
  1. package collector
  2. import (
  3. "time"
  4. "github.com/opencost/opencost/core/pkg/source"
  5. "github.com/opencost/opencost/modules/collector-source/pkg/metric"
  6. "github.com/opencost/opencost/modules/collector-source/pkg/util"
  7. )
  8. const GiB = 1024 * 1024 * 1024
  9. const LocalStorageCostPerGiBHr = 0.04 / 730.0
  10. type collectorMetricsQuerier struct {
  11. collectorProvider StoreProvider
  12. }
  13. func newCollectorMetricsQuerier(repo *metric.MetricRepository, resoluationConfigs []util.ResolutionConfiguration) *collectorMetricsQuerier {
  14. return &collectorMetricsQuerier{
  15. collectorProvider: newRepoStoreProvider(repo, resoluationConfigs),
  16. }
  17. }
  18. func queryCollector[T any](c *collectorMetricsQuerier, start, end time.Time, id metric.MetricCollectorID, decoder source.ResultDecoder[T]) *source.Future[T] {
  19. queryResults := source.NewQueryResults(string(id))
  20. collector := c.collectorProvider.GetStore(start, end)
  21. if collector != nil {
  22. results, err := collector.Query(id)
  23. queryResults.Error = err
  24. for _, result := range results {
  25. queryResults.Results = append(queryResults.Results, result.ToQueryResult())
  26. }
  27. }
  28. ch := make(source.QueryResultsChan, 1)
  29. ch <- queryResults
  30. f := source.NewFuture[T](decoder, ch)
  31. return f
  32. }
  33. func queryCollectorGiB[T any](c *collectorMetricsQuerier, start, end time.Time, id metric.MetricCollectorID, decoder source.ResultDecoder[T]) *source.Future[T] {
  34. queryResults := source.NewQueryResults(string(id))
  35. collector := c.collectorProvider.GetStore(start, end)
  36. if collector != nil {
  37. results, err := collector.Query(id)
  38. queryResults.Error = err
  39. for _, result := range results {
  40. for i := range result.Values {
  41. result.Values[i].Value /= GiB
  42. }
  43. queryResults.Results = append(queryResults.Results, result.ToQueryResult())
  44. }
  45. }
  46. ch := make(source.QueryResultsChan, 1)
  47. ch <- queryResults
  48. f := source.NewFuture[T](decoder, ch)
  49. return f
  50. }
  51. func (c *collectorMetricsQuerier) QueryPVActiveMinutes(start, end time.Time) *source.Future[source.PVActiveMinutesResult] {
  52. return queryCollector(c, start, end, metric.PVActiveMinutesID, source.DecodePVActiveMinutesResult)
  53. }
  54. func (c *collectorMetricsQuerier) QueryPVUsedAverage(start, end time.Time) *source.Future[source.PVUsedAvgResult] {
  55. return queryCollector(c, start, end, metric.PVUsedAverageID, source.DecodePVUsedAvgResult)
  56. }
  57. func (c *collectorMetricsQuerier) QueryPVUsedMax(start, end time.Time) *source.Future[source.PVUsedMaxResult] {
  58. return queryCollector(c, start, end, metric.PVUsedMaxID, source.DecodePVUsedMaxResult)
  59. }
  60. func (c *collectorMetricsQuerier) QueryLocalStorageActiveMinutes(start, end time.Time) *source.Future[source.LocalStorageActiveMinutesResult] {
  61. return queryCollector(c, start, end, metric.LocalStorageActiveMinutesID, source.DecodeLocalStorageActiveMinutesResult)
  62. }
  63. func (c *collectorMetricsQuerier) QueryLocalStorageCost(start, end time.Time) *source.Future[source.LocalStorageCostResult] {
  64. queryResults := source.NewQueryResults("LocalStorageCost")
  65. collector := c.collectorProvider.GetStore(start, end)
  66. if collector != nil {
  67. minutesResults, err := collector.Query(metric.LocalStorageActiveMinutesID)
  68. if err != nil {
  69. queryResults.Error = err
  70. }
  71. minutesByNode := map[string]float64{}
  72. for _, result := range minutesResults {
  73. node := result.MetricLabels[source.NodeLabel]
  74. if node == "" || len(result.Values) == 0 {
  75. continue
  76. }
  77. nodeStart := result.Values[0].Timestamp
  78. nodeEnd := result.Values[len(result.Values)-1].Timestamp
  79. if nodeStart == nil || nodeEnd == nil {
  80. continue
  81. }
  82. minutesByNode[node] = nodeEnd.Sub(*nodeStart).Minutes()
  83. }
  84. bytesResults, err := collector.Query(metric.LocalStorageBytesID)
  85. if err != nil {
  86. queryResults.Error = err
  87. }
  88. for _, result := range bytesResults {
  89. instance := result.MetricLabels[source.InstanceLabel]
  90. if instance == "" || len(result.Values) == 0 {
  91. continue
  92. }
  93. mintues, ok := minutesByNode[instance]
  94. if !ok {
  95. continue
  96. }
  97. queryResult := result.ToQueryResult()
  98. bytes := queryResult.Values[0].Value
  99. GiBs := bytes / GiB
  100. hours := mintues / 60
  101. queryResult.Values[0].Value = GiBs * hours * LocalStorageCostPerGiBHr
  102. queryResults.Results = append(queryResults.Results, queryResult)
  103. }
  104. }
  105. ch := make(source.QueryResultsChan, 1)
  106. ch <- queryResults
  107. return source.NewFuture(source.DecodeLocalStorageCostResult, ch)
  108. }
  109. func (c *collectorMetricsQuerier) QueryLocalStorageUsedCost(start, end time.Time) *source.Future[source.LocalStorageUsedCostResult] {
  110. queryResults := source.NewQueryResults("LocalStorageUsedCost")
  111. collector := c.collectorProvider.GetStore(start, end)
  112. if collector != nil {
  113. minutesResults, err := collector.Query(metric.LocalStorageUsedActiveMinutesID)
  114. if err != nil {
  115. queryResults.Error = err
  116. }
  117. minutesByNode := map[string]float64{}
  118. for _, result := range minutesResults {
  119. node := result.MetricLabels[source.InstanceLabel]
  120. if node == "" || len(result.Values) == 0 {
  121. continue
  122. }
  123. nodeStart := result.Values[0].Timestamp
  124. nodeEnd := result.Values[len(result.Values)-1].Timestamp
  125. if nodeStart == nil || nodeEnd == nil {
  126. continue
  127. }
  128. minutesByNode[node] = nodeEnd.Sub(*nodeStart).Minutes()
  129. }
  130. bytesResults, err := collector.Query(metric.LocalStorageUsedAverageID)
  131. if err != nil {
  132. queryResults.Error = err
  133. }
  134. for _, result := range bytesResults {
  135. instance := result.MetricLabels[source.InstanceLabel]
  136. if instance == "" || len(result.Values) == 0 {
  137. continue
  138. }
  139. mintues, ok := minutesByNode[instance]
  140. if !ok {
  141. continue
  142. }
  143. queryResult := result.ToQueryResult()
  144. bytes := queryResult.Values[0].Value
  145. GiBs := bytes / GiB
  146. hours := mintues / 60
  147. queryResult.Values[0].Value = GiBs * hours * LocalStorageCostPerGiBHr
  148. queryResults.Results = append(queryResults.Results, queryResult)
  149. }
  150. }
  151. ch := make(source.QueryResultsChan, 1)
  152. ch <- queryResults
  153. return source.NewFuture(source.DecodeLocalStorageUsedCostResult, ch)
  154. }
  155. func (c *collectorMetricsQuerier) QueryLocalStorageUsedAvg(start, end time.Time) *source.Future[source.LocalStorageUsedAvgResult] {
  156. return queryCollector(c, start, end, metric.LocalStorageUsedAverageID, source.DecodeLocalStorageUsedAvgResult)
  157. }
  158. func (c *collectorMetricsQuerier) QueryLocalStorageUsedMax(start, end time.Time) *source.Future[source.LocalStorageUsedMaxResult] {
  159. return queryCollector(c, start, end, metric.LocalStorageUsedMaxID, source.DecodeLocalStorageUsedMaxResult)
  160. }
  161. func (c *collectorMetricsQuerier) QueryLocalStorageBytes(start, end time.Time) *source.Future[source.LocalStorageBytesResult] {
  162. return queryCollector(c, start, end, metric.LocalStorageBytesID, source.DecodeLocalStorageBytesResult)
  163. }
  164. func (c *collectorMetricsQuerier) QueryNodeActiveMinutes(start, end time.Time) *source.Future[source.NodeActiveMinutesResult] {
  165. return queryCollector(c, start, end, metric.NodeActiveMinutesID, source.DecodeNodeActiveMinutesResult)
  166. }
  167. func (c *collectorMetricsQuerier) QueryNodeCPUCoresCapacity(start, end time.Time) *source.Future[source.NodeCPUCoresCapacityResult] {
  168. return queryCollector(c, start, end, metric.NodeCPUCoresCapacityID, source.DecodeNodeCPUCoresCapacityResult)
  169. }
  170. func (c *collectorMetricsQuerier) QueryNodeCPUCoresAllocatable(start, end time.Time) *source.Future[source.NodeCPUCoresAllocatableResult] {
  171. return queryCollector(c, start, end, metric.NodeCPUCoresAllocatableID, source.DecodeNodeCPUCoresAllocatableResult)
  172. }
  173. func (c *collectorMetricsQuerier) QueryNodeRAMBytesCapacity(start, end time.Time) *source.Future[source.NodeRAMBytesCapacityResult] {
  174. return queryCollector(c, start, end, metric.NodeRAMBytesCapacityID, source.DecodeNodeRAMBytesCapacityResult)
  175. }
  176. func (c *collectorMetricsQuerier) QueryNodeRAMBytesAllocatable(start, end time.Time) *source.Future[source.NodeRAMBytesAllocatableResult] {
  177. return queryCollector(c, start, end, metric.NodeRAMBytesAllocatableID, source.DecodeNodeRAMBytesAllocatableResult)
  178. }
  179. func (c *collectorMetricsQuerier) QueryNodeGPUCount(start, end time.Time) *source.Future[source.NodeGPUCountResult] {
  180. return queryCollector(c, start, end, metric.NodeGPUCountID, source.DecodeNodeGPUCountResult)
  181. }
  182. func (c *collectorMetricsQuerier) QueryNodeCPUModeTotal(start, end time.Time) *source.Future[source.NodeCPUModeTotalResult] {
  183. return queryCollector(c, start, end, metric.NodeCPUModeTotalID, source.DecodeNodeCPUModeTotalResult)
  184. }
  185. func (c *collectorMetricsQuerier) QueryNodeIsSpot(start, end time.Time) *source.Future[source.NodeIsSpotResult] {
  186. return queryCollector(c, start, end, metric.NodeIsSpotID, source.DecodeNodeIsSpotResult)
  187. }
  188. func (c *collectorMetricsQuerier) QueryNodeRAMSystemPercent(start, end time.Time) *source.Future[source.NodeRAMSystemPercentResult] {
  189. queryResults := source.NewQueryResults("NodeRAMSystemPercent")
  190. collector := c.collectorProvider.GetStore(start, end)
  191. if collector != nil {
  192. capacityResult, err := collector.Query(metric.NodeRAMBytesCapacityID)
  193. if err != nil {
  194. queryResults.Error = err
  195. }
  196. nodeCapacities := map[string]float64{}
  197. for _, result := range capacityResult {
  198. node := result.MetricLabels[source.NodeLabel]
  199. if node == "" || len(result.Values) == 0 {
  200. continue
  201. }
  202. nodeCapacities[node] = result.Values[0].Value
  203. }
  204. results, err := collector.Query(metric.NodeRAMSystemUsageAverageID)
  205. if err != nil {
  206. queryResults.Error = err
  207. }
  208. for _, result := range results {
  209. instance := result.MetricLabels[source.InstanceLabel]
  210. capacity, ok := nodeCapacities[instance]
  211. if !ok || len(result.Values) == 0 {
  212. continue
  213. }
  214. result.Values[0].Value /= capacity
  215. queryResults.Results = append(queryResults.Results, result.ToQueryResult())
  216. }
  217. }
  218. ch := make(source.QueryResultsChan, 1)
  219. ch <- queryResults
  220. f := source.NewFuture(source.DecodeNodeRAMSystemPercentResult, ch)
  221. return f
  222. }
  223. func (c *collectorMetricsQuerier) QueryNodeRAMUserPercent(start, end time.Time) *source.Future[source.NodeRAMUserPercentResult] {
  224. queryResults := source.NewQueryResults("NodeRAMUserPercent")
  225. collector := c.collectorProvider.GetStore(start, end)
  226. if collector != nil {
  227. capacityResult, err := collector.Query(metric.NodeRAMBytesCapacityID)
  228. if err != nil {
  229. queryResults.Error = err
  230. }
  231. nodeCapacities := map[string]float64{}
  232. for _, result := range capacityResult {
  233. node := result.MetricLabels[source.NodeLabel]
  234. if node == "" || len(result.Values) == 0 {
  235. continue
  236. }
  237. nodeCapacities[node] = result.Values[0].Value
  238. }
  239. results, err := collector.Query(metric.NodeRAMUserUsageAverageID)
  240. if err != nil {
  241. queryResults.Error = err
  242. }
  243. for _, result := range results {
  244. instance := result.MetricLabels[source.InstanceLabel]
  245. capacity, ok := nodeCapacities[instance]
  246. if !ok || len(result.Values) == 0 {
  247. continue
  248. }
  249. result.Values[0].Value /= capacity
  250. queryResults.Results = append(queryResults.Results, result.ToQueryResult())
  251. }
  252. }
  253. ch := make(source.QueryResultsChan, 1)
  254. ch <- queryResults
  255. f := source.NewFuture(source.DecodeNodeRAMUserPercentResult, ch)
  256. return f
  257. }
  258. func (c *collectorMetricsQuerier) QueryLBActiveMinutes(start, end time.Time) *source.Future[source.LBActiveMinutesResult] {
  259. return queryCollector(c, start, end, metric.LBActiveMinutesID, source.DecodeLBActiveMinutesResult)
  260. }
  261. func (c *collectorMetricsQuerier) QueryLBPricePerHr(start, end time.Time) *source.Future[source.LBPricePerHrResult] {
  262. return queryCollector(c, start, end, metric.LBPricePerHourID, source.DecodeLBPricePerHrResult)
  263. }
  264. func (c *collectorMetricsQuerier) QueryClusterUptime(start, end time.Time) *source.Future[source.UptimeResult] {
  265. return queryCollector(c, start, end, metric.ClusterUptimeID, source.DecodeUptimeResult)
  266. }
  267. func (c *collectorMetricsQuerier) QueryClusterManagementDuration(start, end time.Time) *source.Future[source.ClusterManagementDurationResult] {
  268. return queryCollector(c, start, end, metric.ClusterManagementDurationID, source.DecodeClusterManagementDurationResult)
  269. }
  270. func (c *collectorMetricsQuerier) QueryClusterManagementPricePerHr(start, end time.Time) *source.Future[source.ClusterManagementPricePerHrResult] {
  271. return queryCollector(c, start, end, metric.ClusterManagementPricePerHourID, source.DecodeClusterManagementPricePerHrResult)
  272. }
  273. func (c *collectorMetricsQuerier) QueryPods(start, end time.Time) *source.Future[source.PodsResult] {
  274. return queryCollector(c, start, end, metric.PodActiveMinutesID, source.DecodePodsResult)
  275. }
  276. func (c *collectorMetricsQuerier) QueryPodsUID(start, end time.Time) *source.Future[source.PodsResult] {
  277. return queryCollector(c, start, end, metric.PodActiveMinutesID, source.DecodePodsResult)
  278. }
  279. func (c *collectorMetricsQuerier) QueryRAMBytesAllocated(start, end time.Time) *source.Future[source.RAMBytesAllocatedResult] {
  280. return queryCollector(c, start, end, metric.RAMBytesAllocatedID, source.DecodeRAMBytesAllocatedResult)
  281. }
  282. func (c *collectorMetricsQuerier) QueryRAMRequests(start, end time.Time) *source.Future[source.RAMRequestsResult] {
  283. return queryCollector(c, start, end, metric.RAMRequestsID, source.DecodeRAMRequestsResult)
  284. }
  285. func (c *collectorMetricsQuerier) QueryRAMLimits(start, end time.Time) *source.Future[source.RAMLimitsResult] {
  286. return queryCollector(c, start, end, metric.RAMLimitsID, source.DecodeRAMLimitsResult)
  287. }
  288. func (c *collectorMetricsQuerier) QueryRAMUsageAvg(start, end time.Time) *source.Future[source.RAMUsageAvgResult] {
  289. return queryCollector(c, start, end, metric.RAMUsageAverageID, source.DecodeRAMUsageAvgResult)
  290. }
  291. func (c *collectorMetricsQuerier) QueryRAMUsageMax(start, end time.Time) *source.Future[source.RAMUsageMaxResult] {
  292. return queryCollector(c, start, end, metric.RAMUsageMaxID, source.DecodeRAMUsageMaxResult)
  293. }
  294. func (c *collectorMetricsQuerier) QueryNodeRAMPricePerGiBHr(start, end time.Time) *source.Future[source.NodeRAMPricePerGiBHrResult] {
  295. return queryCollector(c, start, end, metric.NodeRAMPricePerGiBHourID, source.DecodeNodeRAMPricePerGiBHrResult)
  296. }
  297. func (c *collectorMetricsQuerier) QueryCPUCoresAllocated(start, end time.Time) *source.Future[source.CPUCoresAllocatedResult] {
  298. return queryCollector(c, start, end, metric.CPUCoresAllocatedID, source.DecodeCPUCoresAllocatedResult)
  299. }
  300. func (c *collectorMetricsQuerier) QueryCPURequests(start, end time.Time) *source.Future[source.CPURequestsResult] {
  301. return queryCollector(c, start, end, metric.CPURequestsID, source.DecodeCPURequestsResult)
  302. }
  303. func (c *collectorMetricsQuerier) QueryCPULimits(start, end time.Time) *source.Future[source.CPULimitsResult] {
  304. return queryCollector(c, start, end, metric.CPULimitsID, source.DecodeCPULimitsResult)
  305. }
  306. func (c *collectorMetricsQuerier) QueryCPUUsageAvg(start, end time.Time) *source.Future[source.CPUUsageAvgResult] {
  307. return queryCollector(c, start, end, metric.CPUUsageAverageID, source.DecodeCPUUsageAvgResult)
  308. }
  309. func (c *collectorMetricsQuerier) QueryCPUUsageMax(start, end time.Time) *source.Future[source.CPUUsageMaxResult] {
  310. return queryCollector(c, start, end, metric.CPUUsageMaxID, source.DecodeCPUUsageMaxResult)
  311. }
  312. func (c *collectorMetricsQuerier) QueryNodeCPUPricePerHr(start, end time.Time) *source.Future[source.NodeCPUPricePerHrResult] {
  313. return queryCollector(c, start, end, metric.NodeCPUPricePerHourID, source.DecodeNodeCPUPricePerHrResult)
  314. }
  315. func (c *collectorMetricsQuerier) QueryGPUsAllocated(start, end time.Time) *source.Future[source.GPUsAllocatedResult] {
  316. return queryCollector(c, start, end, metric.GPUsAllocatedID, source.DecodeGPUsAllocatedResult)
  317. }
  318. func (c *collectorMetricsQuerier) QueryGPUsRequested(start, end time.Time) *source.Future[source.GPUsRequestedResult] {
  319. return queryCollector(c, start, end, metric.GPUsRequestedID, source.DecodeGPUsRequestedResult)
  320. }
  321. func (c *collectorMetricsQuerier) QueryGPUsUsageAvg(start, end time.Time) *source.Future[source.GPUsUsageAvgResult] {
  322. return queryCollector(c, start, end, metric.GPUsUsageAverageID, source.DecodeGPUsUsageAvgResult)
  323. }
  324. func (c *collectorMetricsQuerier) QueryGPUsUsageMax(start, end time.Time) *source.Future[source.GPUsUsageMaxResult] {
  325. return queryCollector(c, start, end, metric.GPUsUsageMaxID, source.DecodeGPUsUsageMaxResult)
  326. }
  327. func (c *collectorMetricsQuerier) QueryNodeGPUPricePerHr(start, end time.Time) *source.Future[source.NodeGPUPricePerHrResult] {
  328. return queryCollector(c, start, end, metric.NodeGPUPricePerHourID, source.DecodeNodeGPUPricePerHrResult)
  329. }
  330. func (c *collectorMetricsQuerier) QueryGPUInfo(start, end time.Time) *source.Future[source.GPUInfoResult] {
  331. return queryCollector(c, start, end, metric.GPUInfoID, source.DecodeGPUInfoResult)
  332. }
  333. func (c *collectorMetricsQuerier) QueryIsGPUShared(start, end time.Time) *source.Future[source.IsGPUSharedResult] {
  334. return queryCollector(c, start, end, metric.IsGPUSharedID, source.DecodeIsGPUSharedResult)
  335. }
  336. func (c *collectorMetricsQuerier) QueryPodPVCAllocation(start, end time.Time) *source.Future[source.PodPVCAllocationResult] {
  337. return queryCollector(c, start, end, metric.PodPVCAllocationID, source.DecodePodPVCAllocationResult)
  338. }
  339. func (c *collectorMetricsQuerier) QueryPVCBytesRequested(start, end time.Time) *source.Future[source.PVCBytesRequestedResult] {
  340. return queryCollector(c, start, end, metric.PVCBytesRequestedID, source.DecodePVCBytesRequestedResult)
  341. }
  342. func (c *collectorMetricsQuerier) QueryPVCInfo(start, end time.Time) *source.Future[source.PVCInfoResult] {
  343. return queryCollector(c, start, end, metric.PVCInfoID, source.DecodePVCInfoResult)
  344. }
  345. func (c *collectorMetricsQuerier) QueryPVBytes(start, end time.Time) *source.Future[source.PVBytesResult] {
  346. return queryCollector(c, start, end, metric.PVBytesID, source.DecodePVBytesResult)
  347. }
  348. func (c *collectorMetricsQuerier) QueryPVPricePerGiBHour(start, end time.Time) *source.Future[source.PVPricePerGiBHourResult] {
  349. return queryCollector(c, start, end, metric.PVPricePerGiBHourID, source.DecodePVPricePerGiBHourResult)
  350. }
  351. func (c *collectorMetricsQuerier) QueryPVInfo(start, end time.Time) *source.Future[source.PVInfoResult] {
  352. return queryCollector(c, start, end, metric.PVInfoID, source.DecodePVInfoResult)
  353. }
  354. func (c *collectorMetricsQuerier) QueryNamespaceUptime(start, end time.Time) *source.Future[source.UptimeResult] {
  355. return queryCollector(c, start, end, metric.NamespaceUptimeID, source.DecodeUptimeResult)
  356. }
  357. func (c *collectorMetricsQuerier) QueryNetZoneGiB(start, end time.Time) *source.Future[source.NetZoneGiBResult] {
  358. return queryCollectorGiB(c, start, end, metric.NetZoneGiBID, source.DecodeNetZoneGiBResult)
  359. }
  360. func (c *collectorMetricsQuerier) QueryNetZonePricePerGiB(start, end time.Time) *source.Future[source.NetZonePricePerGiBResult] {
  361. return queryCollector(c, start, end, metric.NetZonePricePerGiBID, source.DecodeNetZonePricePerGiBResult)
  362. }
  363. func (c *collectorMetricsQuerier) QueryNetRegionGiB(start, end time.Time) *source.Future[source.NetRegionGiBResult] {
  364. return queryCollectorGiB(c, start, end, metric.NetRegionGiBID, source.DecodeNetRegionGiBResult)
  365. }
  366. func (c *collectorMetricsQuerier) QueryNetRegionPricePerGiB(start, end time.Time) *source.Future[source.NetRegionPricePerGiBResult] {
  367. return queryCollector(c, start, end, metric.NetRegionPricePerGiBID, source.DecodeNetRegionPricePerGiBResult)
  368. }
  369. func (c *collectorMetricsQuerier) QueryNetInternetGiB(start, end time.Time) *source.Future[source.NetInternetGiBResult] {
  370. return queryCollectorGiB(c, start, end, metric.NetInternetGiBID, source.DecodeNetInternetGiBResult)
  371. }
  372. func (c *collectorMetricsQuerier) QueryNetInternetPricePerGiB(start, end time.Time) *source.Future[source.NetInternetPricePerGiBResult] {
  373. return queryCollector(c, start, end, metric.NetInternetPricePerGiBID, source.DecodeNetInternetPricePerGiBResult)
  374. }
  375. func (c *collectorMetricsQuerier) QueryNetInternetServiceGiB(start, end time.Time) *source.Future[source.NetInternetServiceGiBResult] {
  376. return queryCollectorGiB(c, start, end, metric.NetInternetServiceGiBID, source.DecodeNetInternetServiceGiBResult)
  377. }
  378. func (c *collectorMetricsQuerier) QueryNetTransferBytes(start, end time.Time) *source.Future[source.NetTransferBytesResult] {
  379. return queryCollector(c, start, end, metric.NetTransferBytesID, source.DecodeNetTransferBytesResult)
  380. }
  381. func (c *collectorMetricsQuerier) QueryNetZoneIngressGiB(start, end time.Time) *source.Future[source.NetZoneIngressGiBResult] {
  382. return queryCollectorGiB(c, start, end, metric.NetZoneIngressGiBID, source.DecodeNetZoneIngressGiBResult)
  383. }
  384. func (c *collectorMetricsQuerier) QueryNetRegionIngressGiB(start, end time.Time) *source.Future[source.NetRegionIngressGiBResult] {
  385. return queryCollectorGiB(c, start, end, metric.NetRegionIngressGiBID, source.DecodeNetRegionIngressGiBResult)
  386. }
  387. func (c *collectorMetricsQuerier) QueryNetInternetIngressGiB(start, end time.Time) *source.Future[source.NetInternetIngressGiBResult] {
  388. return queryCollectorGiB(c, start, end, metric.NetInternetIngressGiBID, source.DecodeNetInternetIngressGiBResult)
  389. }
  390. func (c *collectorMetricsQuerier) QueryNetInternetServiceIngressGiB(start, end time.Time) *source.Future[source.NetInternetServiceIngressGiBResult] {
  391. return queryCollectorGiB(c, start, end, metric.NetInternetServiceIngressGiBID, source.DecodeNetInternetServiceIngressGiBResult)
  392. }
  393. func (c *collectorMetricsQuerier) QueryNetReceiveBytes(start, end time.Time) *source.Future[source.NetReceiveBytesResult] {
  394. return queryCollector(c, start, end, metric.NetReceiveBytesID, source.DecodeNetReceiveBytesResult)
  395. }
  396. func (c *collectorMetricsQuerier) QueryNamespaceAnnotations(start, end time.Time) *source.Future[source.NamespaceAnnotationsResult] {
  397. return queryCollector(c, start, end, metric.NamespaceAnnotationsID, source.DecodeNamespaceAnnotationsResult)
  398. }
  399. func (c *collectorMetricsQuerier) QueryPodAnnotations(start, end time.Time) *source.Future[source.PodAnnotationsResult] {
  400. return queryCollector(c, start, end, metric.PodAnnotationsID, source.DecodePodAnnotationsResult)
  401. }
  402. func (c *collectorMetricsQuerier) QueryNodeLabels(start, end time.Time) *source.Future[source.NodeLabelsResult] {
  403. return queryCollector(c, start, end, metric.NodeLabelsID, source.DecodeNodeLabelsResult)
  404. }
  405. func (c *collectorMetricsQuerier) QueryNamespaceLabels(start, end time.Time) *source.Future[source.NamespaceLabelsResult] {
  406. return queryCollector(c, start, end, metric.NamespaceLabelsID, source.DecodeNamespaceLabelsResult)
  407. }
  408. func (c *collectorMetricsQuerier) QueryPodLabels(start, end time.Time) *source.Future[source.PodLabelsResult] {
  409. return queryCollector(c, start, end, metric.PodLabelsID, source.DecodePodLabelsResult)
  410. }
  411. func (c *collectorMetricsQuerier) QueryServiceLabels(start, end time.Time) *source.Future[source.ServiceLabelsResult] {
  412. return queryCollector(c, start, end, metric.ServiceLabelsID, source.DecodeServiceLabelsResult)
  413. }
  414. func (c *collectorMetricsQuerier) QueryDeploymentLabels(start, end time.Time) *source.Future[source.DeploymentLabelsResult] {
  415. return queryCollector(c, start, end, metric.DeploymentLabelsID, source.DecodeDeploymentLabelsResult)
  416. }
  417. func (c *collectorMetricsQuerier) QueryStatefulSetLabels(start, end time.Time) *source.Future[source.StatefulSetLabelsResult] {
  418. return queryCollector(c, start, end, metric.StatefulSetLabelsID, source.DecodeStatefulSetLabelsResult)
  419. }
  420. func (c *collectorMetricsQuerier) QueryDaemonSetLabels(start, end time.Time) *source.Future[source.DaemonSetLabelsResult] {
  421. return queryCollector(c, start, end, metric.DaemonSetLabelsID, source.DecodeDaemonSetLabelsResult)
  422. }
  423. func (c *collectorMetricsQuerier) QueryJobLabels(start, end time.Time) *source.Future[source.JobLabelsResult] {
  424. return queryCollector(c, start, end, metric.JobLabelsID, source.DecodeJobLabelsResult)
  425. }
  426. func (c *collectorMetricsQuerier) QueryPodsWithReplicaSetOwner(start, end time.Time) *source.Future[source.PodsWithReplicaSetOwnerResult] {
  427. return queryCollector(c, start, end, metric.PodsWithReplicaSetOwnerID, source.DecodePodsWithReplicaSetOwnerResult)
  428. }
  429. func (c *collectorMetricsQuerier) QueryReplicaSetsWithoutOwners(start, end time.Time) *source.Future[source.ReplicaSetsWithoutOwnersResult] {
  430. return queryCollector(c, start, end, metric.ReplicaSetsWithoutOwnersID, source.DecodeReplicaSetsWithoutOwnersResult)
  431. }
  432. func (c *collectorMetricsQuerier) QueryReplicaSetsWithRollout(start, end time.Time) *source.Future[source.ReplicaSetsWithRolloutResult] {
  433. return queryCollector(c, start, end, metric.ReplicaSetsWithRolloutID, source.DecodeReplicaSetsWithRolloutResult)
  434. }
  435. func (c *collectorMetricsQuerier) QueryResourceQuotaUptime(start, end time.Time) *source.Future[source.UptimeResult] {
  436. return queryCollector(c, start, end, metric.ResourceQuotaUptimeID, source.DecodeUptimeResult)
  437. }
  438. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecCPURequestAverage(start, end time.Time) *source.Future[source.ResourceQuotaSpecCPURequestAvgResult] {
  439. return queryCollector(c, start, end, metric.ResourceQuotaSpecCPURequestAverageID, source.DecodeResourceQuotaSpecCPURequestAvgResult)
  440. }
  441. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecCPURequestMax(start, end time.Time) *source.Future[source.ResourceQuotaSpecCPURequestMaxResult] {
  442. return queryCollector(c, start, end, metric.ResourceQuotaSpecCPURequestMaxID, source.DecodeResourceQuotaSpecCPURequestMaxResult)
  443. }
  444. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecRAMRequestAverage(start, end time.Time) *source.Future[source.ResourceQuotaSpecRAMRequestAvgResult] {
  445. return queryCollector(c, start, end, metric.ResourceQuotaSpecRAMRequestAverageID, source.DecodeResourceQuotaSpecRAMRequestAvgResult)
  446. }
  447. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecRAMRequestMax(start, end time.Time) *source.Future[source.ResourceQuotaSpecRAMRequestMaxResult] {
  448. return queryCollector(c, start, end, metric.ResourceQuotaSpecRAMRequestMaxID, source.DecodeResourceQuotaSpecRAMRequestMaxResult)
  449. }
  450. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecCPULimitAverage(start, end time.Time) *source.Future[source.ResourceQuotaSpecCPULimitAvgResult] {
  451. return queryCollector(c, start, end, metric.ResourceQuotaSpecCPULimitAverageID, source.DecodeResourceQuotaSpecCPULimitAvgResult)
  452. }
  453. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecCPULimitMax(start, end time.Time) *source.Future[source.ResourceQuotaSpecCPULimitMaxResult] {
  454. return queryCollector(c, start, end, metric.ResourceQuotaSpecCPULimitMaxID, source.DecodeResourceQuotaSpecCPULimitMaxResult)
  455. }
  456. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecRAMLimitAverage(start, end time.Time) *source.Future[source.ResourceQuotaSpecRAMLimitAvgResult] {
  457. return queryCollector(c, start, end, metric.ResourceQuotaSpecRAMLimitAverageID, source.DecodeResourceQuotaSpecRAMLimitAvgResult)
  458. }
  459. func (c *collectorMetricsQuerier) QueryResourceQuotaSpecRAMLimitMax(start, end time.Time) *source.Future[source.ResourceQuotaSpecRAMLimitMaxResult] {
  460. return queryCollector(c, start, end, metric.ResourceQuotaSpecRAMLimitMaxID, source.DecodeResourceQuotaSpecRAMLimitMaxResult)
  461. }
  462. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedCPURequestAverage(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedCPURequestAvgResult] {
  463. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedCPURequestAverageID, source.DecodeResourceQuotaStatusUsedCPURequestAvgResult)
  464. }
  465. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedCPURequestMax(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedCPURequestMaxResult] {
  466. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedCPURequestMaxID, source.DecodeResourceQuotaStatusUsedCPURequestMaxResult)
  467. }
  468. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedRAMRequestAverage(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedRAMRequestAvgResult] {
  469. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedRAMRequestAverageID, source.DecodeResourceQuotaStatusUsedRAMRequestAvgResult)
  470. }
  471. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedRAMRequestMax(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedRAMRequestMaxResult] {
  472. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedRAMRequestMaxID, source.DecodeResourceQuotaStatusUsedRAMRequestMaxResult)
  473. }
  474. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedCPULimitAverage(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedCPULimitAvgResult] {
  475. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedCPULimitAverageID, source.DecodeResourceQuotaStatusUsedCPULimitAvgResult)
  476. }
  477. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedCPULimitMax(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedCPULimitMaxResult] {
  478. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedCPULimitMaxID, source.DecodeResourceQuotaStatusUsedCPULimitMaxResult)
  479. }
  480. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedRAMLimitAverage(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedRAMLimitAvgResult] {
  481. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedRAMLimitAverageID, source.DecodeResourceQuotaStatusUsedRAMLimitAvgResult)
  482. }
  483. func (c *collectorMetricsQuerier) QueryResourceQuotaStatusUsedRAMLimitMax(start, end time.Time) *source.Future[source.ResourceQuotaStatusUsedRAMLimitMaxResult] {
  484. return queryCollector(c, start, end, metric.ResourceQuotaStatusUsedRAMLimitMaxID, source.DecodeResourceQuotaStatusUsedRAMLimitMaxResult)
  485. }
  486. func (c *collectorMetricsQuerier) QueryDataCoverage(limitDays int) (time.Time, time.Time, error) {
  487. return c.collectorProvider.GetDailyDataCoverage(limitDays)
  488. }