datasource.go 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. package source
  2. import (
  3. "time"
  4. "github.com/julienschmidt/httprouter"
  5. "github.com/opencost/opencost/core/pkg/clusters"
  6. "github.com/opencost/opencost/core/pkg/diagnostics"
  7. )
  8. // Query name constants for use with MockMetricsQuerier.SetOverride.
  9. const (
  10. // Local Cluster Disks
  11. QueryLocalStorageActiveMinutes = "QueryLocalStorageActiveMinutes"
  12. QueryLocalStorageUsedAvg = "QueryLocalStorageUsedAvg"
  13. QueryLocalStorageUsedMax = "QueryLocalStorageUsedMax"
  14. QueryLocalStorageBytes = "QueryLocalStorageBytes"
  15. QueryKMLocalStorageUsedAvg = "QueryKMLocalStorageUsedAvg"
  16. QueryKMLocalStorageUsedMax = "QueryKMLocalStorageUsedMax"
  17. QueryKMLocalStorageBytes = "QueryKMLocalStorageBytes"
  18. // Nodes
  19. QueryNodeInfo = "QueryNodeInfo"
  20. QueryNodeUptime = "QueryNodeUptime"
  21. QueryNodeActiveMinutes = "QueryNodeActiveMinutes"
  22. QueryNodeCPUCoresCapacity = "QueryNodeCPUCoresCapacity"
  23. QueryNodeCPUCoresAllocatable = "QueryNodeCPUCoresAllocatable"
  24. QueryNodeRAMBytesCapacity = "QueryNodeRAMBytesCapacity"
  25. QueryNodeRAMBytesAllocatable = "QueryNodeRAMBytesAllocatable"
  26. QueryNodeGPUCount = "QueryNodeGPUCount"
  27. QueryNodeCPUModeTotal = "QueryNodeCPUModeTotal"
  28. QueryNodeIsSpot = "QueryNodeIsSpot"
  29. QueryNodeRAMSystemPercent = "QueryNodeRAMSystemPercent"
  30. QueryNodeRAMUserPercent = "QueryNodeRAMUserPercent"
  31. QueryNodeResourceCapacities = "QueryNodeResourceCapacities"
  32. QueryNodeResourcesAllocatable = "QueryNodeResourcesAllocatable"
  33. // Load Balancers
  34. QueryLBActiveMinutes = "QueryLBActiveMinutes"
  35. QueryLBPricePerHr = "QueryLBPricePerHr"
  36. // Cluster Management
  37. QueryClusterInfo = "QueryClusterInfo"
  38. QueryClusterKubeModelVersion = "QueryClusterKubeModelVersion"
  39. QueryClusterUptime = "QueryClusterUptime"
  40. QueryClusterManagementDuration = "QueryClusterManagementDuration"
  41. QueryClusterManagementPricePerHr = "QueryClusterManagementPricePerHr"
  42. // Pods
  43. QueryPods = "QueryPods"
  44. QueryPodsUID = "QueryPodsUID"
  45. QueryPodInfo = "QueryPodInfo"
  46. QueryPodUptime = "QueryPodUptime"
  47. QueryPodOwners = "QueryPodOwners"
  48. QueryPodPVCVolumes = "QueryPodPVCVolumes"
  49. QueryPodNetworkEgressBytes = "QueryPodNetworkEgressBytes"
  50. QueryPodNetworkIngressBytes = "QueryPodNetworkIngressBytes"
  51. // Container
  52. QueryContainerUptime = "QueryContainerUptime"
  53. QueryContainerResourceRequests = "QueryContainerResourceRequests"
  54. QueryContainerResourceLimits = "QueryContainerResourceLimits"
  55. // RAM
  56. QueryRAMBytesAllocated = "QueryRAMBytesAllocated"
  57. QueryRAMRequests = "QueryRAMRequests"
  58. QueryRAMLimits = "QueryRAMLimits"
  59. QueryRAMUsageAvg = "QueryRAMUsageAvg"
  60. QueryRAMUsageMax = "QueryRAMUsageMax"
  61. QueryNodeRAMPricePerGiBHr = "QueryNodeRAMPricePerGiBHr"
  62. // CPU
  63. QueryCPUCoresAllocated = "QueryCPUCoresAllocated"
  64. QueryCPURequests = "QueryCPURequests"
  65. QueryCPULimits = "QueryCPULimits"
  66. QueryCPUUsageAvg = "QueryCPUUsageAvg"
  67. QueryCPUUsageMax = "QueryCPUUsageMax"
  68. QueryNodeCPUPricePerHr = "QueryNodeCPUPricePerHr"
  69. // GPU
  70. QueryGPUsAllocated = "QueryGPUsAllocated"
  71. QueryGPUsRequested = "QueryGPUsRequested"
  72. QueryGPUsUsageAvg = "QueryGPUsUsageAvg"
  73. QueryGPUsUsageMax = "QueryGPUsUsageMax"
  74. QueryNodeGPUPricePerHr = "QueryNodeGPUPricePerHr"
  75. QueryGPUInfo = "QueryGPUInfo"
  76. QueryIsGPUShared = "QueryIsGPUShared"
  77. // Device
  78. QueryDCGMDeviceInfo = "QueryDCGMDeviceInfo"
  79. QueryDCGMDeviceUptime = "QueryDCGMDeviceUptime"
  80. QueryDCGMContainerUsageAvg = "QueryDCGMContainerUsageAvg"
  81. QueryDCGMContainerUsageMax = "QueryDCGMContainerUsageMax"
  82. // PVC
  83. QueryPodPVCAllocation = "QueryPodPVCAllocation"
  84. QueryPVCBytesRequested = "QueryPVCBytesRequested"
  85. QueryPVCInfo = "QueryPVCInfo"
  86. QueryKMPVCInfo = "QueryKMPVCInfo"
  87. QueryPVCUptime = "QueryPVCUptime"
  88. QueryPVCBytesUsedAverage = "QueryPVCBytesUsedAverage"
  89. QueryPVCBytesUsedMax = "QueryPVCBytesUsedMax"
  90. // PV
  91. QueryPVBytes = "QueryPVBytes"
  92. QueryPVPricePerGiBHour = "QueryPVPricePerGiBHour"
  93. QueryPVInfo = "QueryPVInfo"
  94. QueryPVActiveMinutes = "QueryPVActiveMinutes"
  95. QueryPVUsedAverage = "QueryPVUsedAverage"
  96. QueryPVUsedMax = "QueryPVUsedMax"
  97. QueryKMPVInfo = "QueryKMPVInfo"
  98. QueryPVUptime = "QueryPVUptime"
  99. // Deployment
  100. QueryDeploymentInfo = "QueryDeploymentInfo"
  101. QueryDeploymentUptime = "QueryDeploymentUptime"
  102. QueryDeploymentLabels = "QueryDeploymentLabels"
  103. QueryDeploymentAnnotations = "QueryDeploymentAnnotations"
  104. QueryDeploymentMatchLabels = "QueryDeploymentMatchLabels"
  105. // StatefulSet
  106. QueryStatefulSetInfo = "QueryStatefulSetInfo"
  107. QueryStatefulSetUptime = "QueryStatefulSetUptime"
  108. QueryStatefulSetLabels = "QueryStatefulSetLabels"
  109. QueryStatefulSetAnnotations = "QueryStatefulSetAnnotations"
  110. QueryStatefulSetMatchLabels = "QueryStatefulSetMatchLabels"
  111. // DaemonSet
  112. QueryDaemonSetInfo = "QueryDaemonSetInfo"
  113. QueryDaemonSetUptime = "QueryDaemonSetUptime"
  114. QueryDaemonSetLabels = "QueryDaemonSetLabels"
  115. QueryDaemonSetAnnotations = "QueryDaemonSetAnnotations"
  116. QueryDaemonSetArguments = "QueryDaemonSetArguments"
  117. // Job
  118. QueryJobInfo = "QueryJobInfo"
  119. QueryJobUptime = "QueryJobUptime"
  120. QueryJobLabels = "QueryJobLabels"
  121. QueryJobAnnotations = "QueryJobAnnotations"
  122. // CronJob
  123. QueryCronJobInfo = "QueryCronJobInfo"
  124. QueryCronJobUptime = "QueryCronJobUptime"
  125. QueryCronJobLabels = "QueryCronJobLabels"
  126. QueryCronJobAnnotations = "QueryCronJobAnnotations"
  127. // ReplicaSet
  128. QueryReplicaSetInfo = "QueryReplicaSetInfo"
  129. QueryReplicaSetUptime = "QueryReplicaSetUptime"
  130. QueryReplicaSetLabels = "QueryReplicaSetLabels"
  131. QueryReplicaSetAnnotations = "QueryReplicaSetAnnotations"
  132. QueryReplicaSetOwners = "QueryReplicaSetOwners"
  133. QueryPodsWithReplicaSetOwner = "QueryPodsWithReplicaSetOwner"
  134. QueryReplicaSetsWithoutOwners = "QueryReplicaSetsWithoutOwners"
  135. QueryReplicaSetsWithRollout = "QueryReplicaSetsWithRollout"
  136. // Namespace
  137. QueryNamespaceInfo = "QueryNamespaceInfo"
  138. QueryNamespaceUptime = "QueryNamespaceUptime"
  139. QueryNamespaceAnnotations = "QueryNamespaceAnnotations"
  140. QueryNamespaceLabels = "QueryNamespaceLabels"
  141. // Service
  142. QueryServiceInfo = "QueryServiceInfo"
  143. QueryServiceUptime = "QueryServiceUptime"
  144. QueryServiceSelectorLabels = "QueryServiceSelectorLabels"
  145. // Network Egress
  146. QueryNetZoneGiB = "QueryNetZoneGiB"
  147. QueryNetZonePricePerGiB = "QueryNetZonePricePerGiB"
  148. QueryNetRegionGiB = "QueryNetRegionGiB"
  149. QueryNetRegionPricePerGiB = "QueryNetRegionPricePerGiB"
  150. QueryNetInternetGiB = "QueryNetInternetGiB"
  151. QueryNetInternetPricePerGiB = "QueryNetInternetPricePerGiB"
  152. QueryNetInternetServiceGiB = "QueryNetInternetServiceGiB"
  153. QueryNetNatGatewayPricePerGiB = "QueryNetNatGatewayPricePerGiB"
  154. QueryNetNatGatewayGiB = "QueryNetNatGatewayGiB"
  155. QueryNetTransferBytes = "QueryNetTransferBytes"
  156. // Network Ingress
  157. QueryNetZoneIngressGiB = "QueryNetZoneIngressGiB"
  158. QueryNetRegionIngressGiB = "QueryNetRegionIngressGiB"
  159. QueryNetInternetIngressGiB = "QueryNetInternetIngressGiB"
  160. QueryNetInternetServiceIngressGiB = "QueryNetInternetServiceIngressGiB"
  161. QueryNetNatGatewayIngressPricePerGiB = "QueryNetNatGatewayIngressPricePerGiB"
  162. QueryNetNatGatewayIngressGiB = "QueryNetNatGatewayIngressGiB"
  163. QueryNetReceiveBytes = "QueryNetReceiveBytes"
  164. // Labels
  165. QueryNodeLabels = "QueryNodeLabels"
  166. QueryPodLabels = "QueryPodLabels"
  167. // Pod ownership
  168. QueryPodAnnotations = "QueryPodAnnotations"
  169. QueryPodsWithDaemonSetOwner = "QueryPodsWithDaemonSetOwner"
  170. QueryPodsWithJobOwner = "QueryPodsWithJobOwner"
  171. // ResourceQuotas
  172. QueryResourceQuotaInfo = "QueryResourceQuotaInfo"
  173. QueryResourceQuotaUptime = "QueryResourceQuotaUptime"
  174. QueryResourceQuotaSpecCPURequestAverage = "QueryResourceQuotaSpecCPURequestAverage"
  175. QueryResourceQuotaSpecCPURequestMax = "QueryResourceQuotaSpecCPURequestMax"
  176. QueryResourceQuotaSpecRAMRequestAverage = "QueryResourceQuotaSpecRAMRequestAverage"
  177. QueryResourceQuotaSpecRAMRequestMax = "QueryResourceQuotaSpecRAMRequestMax"
  178. QueryResourceQuotaSpecCPULimitAverage = "QueryResourceQuotaSpecCPULimitAverage"
  179. QueryResourceQuotaSpecCPULimitMax = "QueryResourceQuotaSpecCPULimitMax"
  180. QueryResourceQuotaSpecRAMLimitAverage = "QueryResourceQuotaSpecRAMLimitAverage"
  181. QueryResourceQuotaSpecRAMLimitMax = "QueryResourceQuotaSpecRAMLimitMax"
  182. QueryResourceQuotaStatusUsedCPURequestAverage = "QueryResourceQuotaStatusUsedCPURequestAverage"
  183. QueryResourceQuotaStatusUsedCPURequestMax = "QueryResourceQuotaStatusUsedCPURequestMax"
  184. QueryResourceQuotaStatusUsedRAMRequestAverage = "QueryResourceQuotaStatusUsedRAMRequestAverage"
  185. QueryResourceQuotaStatusUsedRAMRequestMax = "QueryResourceQuotaStatusUsedRAMRequestMax"
  186. QueryResourceQuotaStatusUsedCPULimitAverage = "QueryResourceQuotaStatusUsedCPULimitAverage"
  187. QueryResourceQuotaStatusUsedCPULimitMax = "QueryResourceQuotaStatusUsedCPULimitMax"
  188. QueryResourceQuotaStatusUsedRAMLimitAverage = "QueryResourceQuotaStatusUsedRAMLimitAverage"
  189. QueryResourceQuotaStatusUsedRAMLimitMax = "QueryResourceQuotaStatusUsedRAMLimitMax"
  190. // Data Coverage
  191. QueryDataCoverage = "QueryDataCoverage"
  192. // Inference Metrics
  193. QueryInferencePromptTokens = "QueryInferencePromptTokens"
  194. QueryInferenceGenerationTokens = "QueryInferenceGenerationTokens"
  195. QueryInferenceInputProcessingTime = "QueryInferenceInputProcessingTime"
  196. QueryInferenceOutputProcessingTime = "QueryInferenceOutputProcessingTime"
  197. QueryInferenceCachedTokens = "QueryInferenceCachedTokens"
  198. QueryInferenceCacheConfig = "QueryInferenceCacheConfig"
  199. )
  200. type MetricsQuerier interface {
  201. // Cluster Disks
  202. // Local Cluster Disks
  203. QueryLocalStorageActiveMinutes(start, end time.Time) *Future[LocalStorageActiveMinutesResult]
  204. QueryLocalStorageUsedAvg(start, end time.Time) *Future[LocalStorageUsedAvgResult]
  205. QueryLocalStorageUsedMax(start, end time.Time) *Future[LocalStorageUsedMaxResult]
  206. QueryLocalStorageBytes(start, end time.Time) *Future[LocalStorageBytesResult]
  207. // Local Storage Metrics aggregated exclusively on NodeUID
  208. QueryKMLocalStorageUsedAvg(start, end time.Time) *Future[NodeUIDValueResult]
  209. QueryKMLocalStorageUsedMax(start, end time.Time) *Future[NodeUIDValueResult]
  210. QueryKMLocalStorageBytes(start, end time.Time) *Future[UIDValueResult]
  211. // Nodes
  212. QueryNodeInfo(start, end time.Time) *Future[NodeInfoResult]
  213. QueryNodeUptime(start, end time.Time) *Future[UptimeResult]
  214. QueryNodeActiveMinutes(start, end time.Time) *Future[NodeActiveMinutesResult]
  215. QueryNodeCPUCoresCapacity(start, end time.Time) *Future[NodeCPUCoresCapacityResult]
  216. QueryNodeCPUCoresAllocatable(start, end time.Time) *Future[NodeCPUCoresAllocatableResult]
  217. QueryNodeRAMBytesCapacity(start, end time.Time) *Future[NodeRAMBytesCapacityResult]
  218. QueryNodeRAMBytesAllocatable(start, end time.Time) *Future[NodeRAMBytesAllocatableResult]
  219. QueryNodeGPUCount(start, end time.Time) *Future[NodeGPUCountResult]
  220. QueryNodeCPUModeTotal(start, end time.Time) *Future[NodeCPUModeTotalResult]
  221. QueryNodeIsSpot(start, end time.Time) *Future[NodeIsSpotResult]
  222. QueryNodeRAMSystemPercent(start, end time.Time) *Future[NodeRAMSystemPercentResult]
  223. QueryNodeRAMUserPercent(start, end time.Time) *Future[NodeRAMUserPercentResult]
  224. QueryNodeResourceCapacities(start, end time.Time) *Future[ResourceResult]
  225. QueryNodeResourcesAllocatable(start, end time.Time) *Future[ResourceResult]
  226. // Load Balancers
  227. QueryLBActiveMinutes(start, end time.Time) *Future[LBActiveMinutesResult]
  228. QueryLBPricePerHr(start, end time.Time) *Future[LBPricePerHrResult]
  229. // Cluster Management
  230. QueryClusterInfo(start, end time.Time) *Future[ClusterInfoResult]
  231. QueryClusterKubeModelVersion(start, end time.Time) *Future[ClusterKubeModelVersionResult]
  232. QueryClusterUptime(start, end time.Time) *Future[UptimeResult]
  233. QueryClusterManagementDuration(start, end time.Time) *Future[ClusterManagementDurationResult]
  234. QueryClusterManagementPricePerHr(start, end time.Time) *Future[ClusterManagementPricePerHrResult]
  235. // Pods
  236. QueryPods(start, end time.Time) *Future[PodsResult]
  237. QueryPodsUID(start, end time.Time) *Future[PodsResult]
  238. QueryPodInfo(start, end time.Time) *Future[PodInfoResult]
  239. QueryPodUptime(start, end time.Time) *Future[UptimeResult]
  240. QueryPodOwners(start, end time.Time) *Future[OwnerResult]
  241. QueryPodPVCVolumes(start, end time.Time) *Future[PodPVCVolumeResult]
  242. QueryPodNetworkEgressBytes(start, end time.Time) *Future[PodNetworkBytesResult]
  243. QueryPodNetworkIngressBytes(start, end time.Time) *Future[PodNetworkBytesResult]
  244. // Container
  245. QueryContainerUptime(start, end time.Time) *Future[ContainerUptimeResult]
  246. QueryContainerResourceRequests(start, end time.Time) *Future[ContainerResourceResult]
  247. QueryContainerResourceLimits(start, end time.Time) *Future[ContainerResourceResult]
  248. // RAM
  249. QueryRAMBytesAllocated(start, end time.Time) *Future[RAMBytesAllocatedResult]
  250. QueryRAMRequests(start, end time.Time) *Future[RAMRequestsResult]
  251. QueryRAMLimits(start, end time.Time) *Future[RAMLimitsResult]
  252. QueryRAMUsageAvg(start, end time.Time) *Future[RAMUsageAvgResult]
  253. QueryRAMUsageMax(start, end time.Time) *Future[RAMUsageMaxResult]
  254. QueryNodeRAMPricePerGiBHr(start, end time.Time) *Future[NodeRAMPricePerGiBHrResult]
  255. // CPU
  256. QueryCPUCoresAllocated(start, end time.Time) *Future[CPUCoresAllocatedResult]
  257. QueryCPURequests(start, end time.Time) *Future[CPURequestsResult]
  258. QueryCPULimits(start, end time.Time) *Future[CPULimitsResult]
  259. QueryCPUUsageAvg(start, end time.Time) *Future[CPUUsageAvgResult]
  260. QueryCPUUsageMax(start, end time.Time) *Future[CPUUsageMaxResult]
  261. QueryNodeCPUPricePerHr(start, end time.Time) *Future[NodeCPUPricePerHrResult]
  262. // GPU
  263. QueryGPUsAllocated(start, end time.Time) *Future[GPUsAllocatedResult]
  264. QueryGPUsRequested(start, end time.Time) *Future[GPUsRequestedResult]
  265. QueryGPUsUsageAvg(start, end time.Time) *Future[GPUsUsageAvgResult]
  266. QueryGPUsUsageMax(start, end time.Time) *Future[GPUsUsageMaxResult]
  267. QueryNodeGPUPricePerHr(start, end time.Time) *Future[NodeGPUPricePerHrResult]
  268. QueryGPUInfo(start, end time.Time) *Future[GPUInfoResult]
  269. QueryIsGPUShared(start, end time.Time) *Future[IsGPUSharedResult]
  270. // Device
  271. QueryDCGMDeviceInfo(start, end time.Time) *Future[DCGMDeviceInfoResult]
  272. QueryDCGMDeviceUptime(start, end time.Time) *Future[DCGMDeviceUptimeResult]
  273. QueryDCGMContainerUsageAvg(start, end time.Time) *Future[DCGMDeviceContainerUsageResult]
  274. QueryDCGMContainerUsageMax(start, end time.Time) *Future[DCGMDeviceContainerUsageResult]
  275. // PVC
  276. QueryPodPVCAllocation(start, end time.Time) *Future[PodPVCAllocationResult]
  277. QueryPVCBytesRequested(start, end time.Time) *Future[PVCBytesRequestedResult]
  278. QueryPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  279. // UID aggregated version of PVCInfo query
  280. QueryKMPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  281. QueryPVCUptime(start, end time.Time) *Future[UptimeResult]
  282. QueryPVCBytesUsedAverage(start, end time.Time) *Future[PVCUIDValueResult]
  283. QueryPVCBytesUsedMax(start, end time.Time) *Future[PVCUIDValueResult]
  284. // PV
  285. QueryPVBytes(start, end time.Time) *Future[PVBytesResult]
  286. QueryPVPricePerGiBHour(start, end time.Time) *Future[PVPricePerGiBHourResult]
  287. QueryPVInfo(start, end time.Time) *Future[PVInfoResult]
  288. QueryPVActiveMinutes(start, end time.Time) *Future[PVActiveMinutesResult]
  289. QueryPVUsedAverage(start, end time.Time) *Future[PVUsedAvgResult]
  290. QueryPVUsedMax(start, end time.Time) *Future[PVUsedMaxResult]
  291. QueryKMPVInfo(start, end time.Time) *Future[PVInfoResult]
  292. QueryPVUptime(start, end time.Time) *Future[UptimeResult]
  293. // Deployment
  294. QueryDeploymentInfo(start, end time.Time) *Future[DeploymentInfoResult]
  295. QueryDeploymentUptime(start, end time.Time) *Future[UptimeResult]
  296. QueryDeploymentLabels(start, end time.Time) *Future[LabelsResult]
  297. QueryDeploymentAnnotations(start, end time.Time) *Future[AnnotationsResult]
  298. QueryDeploymentMatchLabels(start, end time.Time) *Future[DeploymentLabelsResult]
  299. // StatefulSet
  300. QueryStatefulSetInfo(start, end time.Time) *Future[StatefulSetInfoResult]
  301. QueryStatefulSetUptime(start, end time.Time) *Future[UptimeResult]
  302. QueryStatefulSetLabels(start, end time.Time) *Future[LabelsResult]
  303. QueryStatefulSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  304. QueryStatefulSetMatchLabels(start, end time.Time) *Future[StatefulSetLabelsResult]
  305. // DaemonSet
  306. QueryDaemonSetInfo(start, end time.Time) *Future[DaemonSetInfoResult]
  307. QueryDaemonSetUptime(start, end time.Time) *Future[UptimeResult]
  308. QueryDaemonSetLabels(start, end time.Time) *Future[LabelsResult]
  309. QueryDaemonSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  310. QueryDaemonSetArguments(start, end time.Time) *Future[DaemonSetArgumentResult]
  311. // Job
  312. QueryJobInfo(start, end time.Time) *Future[JobInfoResult]
  313. QueryJobUptime(start, end time.Time) *Future[UptimeResult]
  314. QueryJobLabels(start, end time.Time) *Future[LabelsResult]
  315. QueryJobAnnotations(start, end time.Time) *Future[AnnotationsResult]
  316. // CronJob
  317. QueryCronJobInfo(start, end time.Time) *Future[CronJobInfoResult]
  318. QueryCronJobUptime(start, end time.Time) *Future[UptimeResult]
  319. QueryCronJobLabels(start, end time.Time) *Future[LabelsResult]
  320. QueryCronJobAnnotations(start, end time.Time) *Future[AnnotationsResult]
  321. // ReplicaSet
  322. QueryReplicaSetInfo(start, end time.Time) *Future[ReplicaSetInfoResult]
  323. QueryReplicaSetUptime(start, end time.Time) *Future[UptimeResult]
  324. QueryReplicaSetLabels(start, end time.Time) *Future[LabelsResult]
  325. QueryReplicaSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  326. QueryReplicaSetOwners(start, end time.Time) *Future[OwnerResult]
  327. // Namespace
  328. QueryNamespaceInfo(start, end time.Time) *Future[NamespaceInfoResult]
  329. QueryNamespaceUptime(start, end time.Time) *Future[UptimeResult]
  330. // Service
  331. QueryServiceInfo(start, end time.Time) *Future[ServiceInfoResult]
  332. QueryServiceUptime(start, end time.Time) *Future[UptimeResult]
  333. QueryServiceSelectorLabels(start, end time.Time) *Future[ServiceLabelsResult]
  334. // Network Egress
  335. QueryNetZoneGiB(start, end time.Time) *Future[NetZoneGiBResult]
  336. QueryNetZonePricePerGiB(start, end time.Time) *Future[NetZonePricePerGiBResult]
  337. QueryNetRegionGiB(start, end time.Time) *Future[NetRegionGiBResult]
  338. QueryNetRegionPricePerGiB(start, end time.Time) *Future[NetRegionPricePerGiBResult]
  339. QueryNetInternetGiB(start, end time.Time) *Future[NetInternetGiBResult]
  340. QueryNetInternetPricePerGiB(start, end time.Time) *Future[NetInternetPricePerGiBResult]
  341. QueryNetInternetServiceGiB(start, end time.Time) *Future[NetInternetServiceGiBResult]
  342. QueryNetNatGatewayPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  343. QueryNetNatGatewayGiB(start, end time.Time) *Future[NetNatGatewayGiBResult]
  344. QueryNetTransferBytes(start, end time.Time) *Future[NetTransferBytesResult]
  345. // Network Ingress
  346. QueryNetZoneIngressGiB(start, end time.Time) *Future[NetZoneIngressGiBResult]
  347. QueryNetRegionIngressGiB(start, end time.Time) *Future[NetRegionIngressGiBResult]
  348. QueryNetInternetIngressGiB(start, end time.Time) *Future[NetInternetIngressGiBResult]
  349. QueryNetInternetServiceIngressGiB(start, end time.Time) *Future[NetInternetServiceIngressGiBResult]
  350. QueryNetNatGatewayIngressPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  351. QueryNetNatGatewayIngressGiB(start, end time.Time) *Future[NetNatGatewayIngressGiBResult]
  352. QueryNetReceiveBytes(start, end time.Time) *Future[NetReceiveBytesResult]
  353. // Annotations
  354. QueryNamespaceAnnotations(start, end time.Time) *Future[NamespaceAnnotationsResult]
  355. QueryPodAnnotations(start, end time.Time) *Future[PodAnnotationsResult]
  356. // Labels
  357. QueryNodeLabels(start, end time.Time) *Future[NodeLabelsResult]
  358. QueryNamespaceLabels(start, end time.Time) *Future[NamespaceLabelsResult]
  359. QueryPodLabels(start, end time.Time) *Future[PodLabelsResult]
  360. QueryPodsWithDaemonSetOwner(start, end time.Time) *Future[PodsWithDaemonSetOwnerResult]
  361. QueryPodsWithJobOwner(start, end time.Time) *Future[PodsWithJobOwnerResult]
  362. // ReplicaSet -> Controller mapping
  363. QueryPodsWithReplicaSetOwner(start, end time.Time) *Future[PodsWithReplicaSetOwnerResult]
  364. QueryReplicaSetsWithoutOwners(start, end time.Time) *Future[ReplicaSetsWithoutOwnersResult]
  365. QueryReplicaSetsWithRollout(start, end time.Time) *Future[ReplicaSetsWithRolloutResult]
  366. // ResourceQuotas
  367. QueryResourceQuotaInfo(start, end time.Time) *Future[ResourceQuotaInfoResult]
  368. QueryResourceQuotaUptime(start, end time.Time) *Future[UptimeResult]
  369. QueryResourceQuotaSpecCPURequestAverage(start, end time.Time) *Future[ResourceResult]
  370. QueryResourceQuotaSpecCPURequestMax(start, end time.Time) *Future[ResourceResult]
  371. QueryResourceQuotaSpecRAMRequestAverage(start, end time.Time) *Future[ResourceResult]
  372. QueryResourceQuotaSpecRAMRequestMax(start, end time.Time) *Future[ResourceResult]
  373. QueryResourceQuotaSpecCPULimitAverage(start, end time.Time) *Future[ResourceResult]
  374. QueryResourceQuotaSpecCPULimitMax(start, end time.Time) *Future[ResourceResult]
  375. QueryResourceQuotaSpecRAMLimitAverage(start, end time.Time) *Future[ResourceResult]
  376. QueryResourceQuotaSpecRAMLimitMax(start, end time.Time) *Future[ResourceResult]
  377. QueryResourceQuotaStatusUsedCPURequestAverage(start, end time.Time) *Future[ResourceResult]
  378. QueryResourceQuotaStatusUsedCPURequestMax(start, end time.Time) *Future[ResourceResult]
  379. QueryResourceQuotaStatusUsedRAMRequestAverage(start, end time.Time) *Future[ResourceResult]
  380. QueryResourceQuotaStatusUsedRAMRequestMax(start, end time.Time) *Future[ResourceResult]
  381. QueryResourceQuotaStatusUsedCPULimitAverage(start, end time.Time) *Future[ResourceResult]
  382. QueryResourceQuotaStatusUsedCPULimitMax(start, end time.Time) *Future[ResourceResult]
  383. QueryResourceQuotaStatusUsedRAMLimitAverage(start, end time.Time) *Future[ResourceResult]
  384. QueryResourceQuotaStatusUsedRAMLimitMax(start, end time.Time) *Future[ResourceResult]
  385. // Data Coverage Query
  386. QueryDataCoverage(limitDays int) (time.Time, time.Time, error)
  387. // Inference Metrics (vLLM) - relevant when INFERENCE_COST_ENABLED is set to true
  388. // QueryInferencePromptTokens returns prompt token counts by model_name and namespace
  389. QueryInferencePromptTokens(start, end time.Time) *Future[InferenceTokensResult]
  390. // QueryInferenceGenerationTokens returns generation token counts by model_name and namespace
  391. QueryInferenceGenerationTokens(start, end time.Time) *Future[InferenceTokensResult]
  392. // QueryInferenceInputProcessingTime returns input processing time in seconds by model_name and namespace
  393. QueryInferenceInputProcessingTime(start, end time.Time) *Future[InferenceProcessingTimeResult]
  394. // QueryInferenceOutputProcessingTime returns output processing time in seconds by model_name and namespace
  395. QueryInferenceOutputProcessingTime(start, end time.Time) *Future[InferenceProcessingTimeResult]
  396. // QueryInferenceCachedTokens returns KV cache hit counts by model_name and namespace
  397. QueryInferenceCachedTokens(start, end time.Time) *Future[InferenceTokensResult]
  398. // QueryInferenceCacheConfig returns cache configuration (prefix caching enabled) by model_name and namespace
  399. QueryInferenceCacheConfig(t time.Time) *Future[InferenceCacheConfigResult]
  400. }
  401. type OpenCostDataSource interface {
  402. // RegisterEndPoints registers any custom endpoints that can be used for diagnostics or debug purposes.
  403. RegisterEndPoints(router *httprouter.Router)
  404. // RegisterDiagnostics registers any custom data source diagnostics with the `DiagnosticService` that can
  405. // be used to report externally.
  406. RegisterDiagnostics(diagService diagnostics.DiagnosticService)
  407. // Metrics returns a MetricsQuerier that can be used to query historical metrics data from the data source.
  408. Metrics() MetricsQuerier
  409. // ClusterMap returns a mapping of cluster identifier to ClusterInfo for all known clusters (local only for
  410. // single cluster deployments).
  411. ClusterMap() clusters.ClusterMap
  412. // ClusterInfo returns the ClusterInfoProvider for the local cluster.
  413. ClusterInfo() clusters.ClusterInfoProvider
  414. BatchDuration() time.Duration
  415. Resolution() time.Duration
  416. }