datasource.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  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. type MetricsQuerier interface {
  9. // Cluster Disks
  10. // Local Cluster Disks
  11. QueryLocalStorageActiveMinutes(start, end time.Time) *Future[LocalStorageActiveMinutesResult]
  12. QueryLocalStorageCost(start, end time.Time) *Future[LocalStorageCostResult]
  13. QueryLocalStorageUsedCost(start, end time.Time) *Future[LocalStorageUsedCostResult]
  14. QueryLocalStorageUsedAvg(start, end time.Time) *Future[LocalStorageUsedAvgResult]
  15. QueryLocalStorageUsedMax(start, end time.Time) *Future[LocalStorageUsedMaxResult]
  16. QueryLocalStorageBytes(start, end time.Time) *Future[LocalStorageBytesResult]
  17. // Nodes
  18. QueryNodeInfo(start, end time.Time) *Future[NodeInfoResult]
  19. QueryNodeUptime(start, end time.Time) *Future[UptimeResult]
  20. QueryNodeActiveMinutes(start, end time.Time) *Future[NodeActiveMinutesResult]
  21. QueryNodeCPUCoresCapacity(start, end time.Time) *Future[NodeCPUCoresCapacityResult]
  22. QueryNodeCPUCoresAllocatable(start, end time.Time) *Future[NodeCPUCoresAllocatableResult]
  23. QueryNodeRAMBytesCapacity(start, end time.Time) *Future[NodeRAMBytesCapacityResult]
  24. QueryNodeRAMBytesAllocatable(start, end time.Time) *Future[NodeRAMBytesAllocatableResult]
  25. QueryNodeGPUCount(start, end time.Time) *Future[NodeGPUCountResult]
  26. QueryNodeCPUModeTotal(start, end time.Time) *Future[NodeCPUModeTotalResult]
  27. QueryNodeIsSpot(start, end time.Time) *Future[NodeIsSpotResult]
  28. QueryNodeRAMSystemPercent(start, end time.Time) *Future[NodeRAMSystemPercentResult]
  29. QueryNodeRAMUserPercent(start, end time.Time) *Future[NodeRAMUserPercentResult]
  30. QueryNodeResourceCapacities(start, end time.Time) *Future[ResourceResult]
  31. QueryNodeResourcesAllocatable(start, end time.Time) *Future[ResourceResult]
  32. // Load Balancers
  33. QueryLBActiveMinutes(start, end time.Time) *Future[LBActiveMinutesResult]
  34. QueryLBPricePerHr(start, end time.Time) *Future[LBPricePerHrResult]
  35. // Cluster Management
  36. QueryClusterInfo(start, end time.Time) *Future[ClusterInfoResult]
  37. QueryClusterUptime(start, end time.Time) *Future[UptimeResult]
  38. QueryClusterManagementDuration(start, end time.Time) *Future[ClusterManagementDurationResult]
  39. QueryClusterManagementPricePerHr(start, end time.Time) *Future[ClusterManagementPricePerHrResult]
  40. // Pods
  41. QueryPods(start, end time.Time) *Future[PodsResult]
  42. QueryPodsUID(start, end time.Time) *Future[PodsResult]
  43. QueryPodInfo(start, end time.Time) *Future[PodInfoResult]
  44. QueryPodUptime(start, end time.Time) *Future[UptimeResult]
  45. QueryPodOwners(start, end time.Time) *Future[OwnerResult]
  46. QueryPodPVCVolumes(start, end time.Time) *Future[PodPVCVolumeResult]
  47. QueryPodNetworkEgressBytes(start, end time.Time) *Future[PodNetworkBytesResult]
  48. QueryPodNetworkIngressBytes(start, end time.Time) *Future[PodNetworkBytesResult]
  49. // Container
  50. QueryContainerUptime(start, end time.Time) *Future[ContainerUptimeResult]
  51. QueryContainerResourceRequests(start, end time.Time) *Future[ContainerResourceResult]
  52. QueryContainerResourceLimits(start, end time.Time) *Future[ContainerResourceResult]
  53. // RAM
  54. QueryRAMBytesAllocated(start, end time.Time) *Future[RAMBytesAllocatedResult]
  55. QueryRAMRequests(start, end time.Time) *Future[RAMRequestsResult]
  56. QueryRAMLimits(start, end time.Time) *Future[RAMLimitsResult]
  57. QueryRAMUsageAvg(start, end time.Time) *Future[RAMUsageAvgResult]
  58. QueryRAMUsageMax(start, end time.Time) *Future[RAMUsageMaxResult]
  59. QueryNodeRAMPricePerGiBHr(start, end time.Time) *Future[NodeRAMPricePerGiBHrResult]
  60. // CPU
  61. QueryCPUCoresAllocated(start, end time.Time) *Future[CPUCoresAllocatedResult]
  62. QueryCPURequests(start, end time.Time) *Future[CPURequestsResult]
  63. QueryCPULimits(start, end time.Time) *Future[CPULimitsResult]
  64. QueryCPUUsageAvg(start, end time.Time) *Future[CPUUsageAvgResult]
  65. QueryCPUUsageMax(start, end time.Time) *Future[CPUUsageMaxResult]
  66. QueryNodeCPUPricePerHr(start, end time.Time) *Future[NodeCPUPricePerHrResult]
  67. // GPU
  68. QueryGPUsAllocated(start, end time.Time) *Future[GPUsAllocatedResult]
  69. QueryGPUsRequested(start, end time.Time) *Future[GPUsRequestedResult]
  70. QueryGPUsUsageAvg(start, end time.Time) *Future[GPUsUsageAvgResult]
  71. QueryGPUsUsageMax(start, end time.Time) *Future[GPUsUsageMaxResult]
  72. QueryNodeGPUPricePerHr(start, end time.Time) *Future[NodeGPUPricePerHrResult]
  73. QueryGPUInfo(start, end time.Time) *Future[GPUInfoResult]
  74. QueryIsGPUShared(start, end time.Time) *Future[IsGPUSharedResult]
  75. // Device
  76. QueryDCGMDeviceInfo(start, end time.Time) *Future[DCGMDeviceInfoResult]
  77. QueryDCGMDeviceUptime(start, end time.Time) *Future[DCGMDeviceUptimeResult]
  78. QueryDCGMContainerUsageAvg(start, end time.Time) *Future[DCGMDeviceContainerUsageResult]
  79. QueryDCGMContainerUsageMax(start, end time.Time) *Future[DCGMDeviceContainerUsageResult]
  80. // PVC
  81. QueryPodPVCAllocation(start, end time.Time) *Future[PodPVCAllocationResult]
  82. QueryPVCBytesRequested(start, end time.Time) *Future[PVCBytesRequestedResult]
  83. QueryPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  84. QueryPVCUptime(start, end time.Time) *Future[UptimeResult]
  85. // PV
  86. QueryPVBytes(start, end time.Time) *Future[PVBytesResult]
  87. QueryPVPricePerGiBHour(start, end time.Time) *Future[PVPricePerGiBHourResult]
  88. QueryPVInfo(start, end time.Time) *Future[PVInfoResult]
  89. QueryPVUptime(start, end time.Time) *Future[UptimeResult]
  90. QueryPVActiveMinutes(start, end time.Time) *Future[PVActiveMinutesResult]
  91. QueryPVUsedAverage(start, end time.Time) *Future[PVUsedAvgResult]
  92. QueryPVUsedMax(start, end time.Time) *Future[PVUsedMaxResult]
  93. // Deployment
  94. QueryDeploymentInfo(start, end time.Time) *Future[DeploymentInfoResult]
  95. QueryDeploymentUptime(start, end time.Time) *Future[UptimeResult]
  96. QueryDeploymentLabels(start, end time.Time) *Future[LabelsResult]
  97. QueryDeploymentAnnotations(start, end time.Time) *Future[AnnotationsResult]
  98. QueryDeploymentMatchLabels(start, end time.Time) *Future[DeploymentLabelsResult]
  99. // StatefulSet
  100. QueryStatefulSetInfo(start, end time.Time) *Future[StatefulSetInfoResult]
  101. QueryStatefulSetUptime(start, end time.Time) *Future[UptimeResult]
  102. QueryStatefulSetLabels(start, end time.Time) *Future[LabelsResult]
  103. QueryStatefulSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  104. QueryStatefulSetMatchLabels(start, end time.Time) *Future[StatefulSetLabelsResult]
  105. // DaemonSet
  106. QueryDaemonSetInfo(start, end time.Time) *Future[DaemonSetInfoResult]
  107. QueryDaemonSetUptime(start, end time.Time) *Future[UptimeResult]
  108. QueryDaemonSetLabels(start, end time.Time) *Future[LabelsResult]
  109. QueryDaemonSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  110. // Job
  111. QueryJobInfo(start, end time.Time) *Future[JobInfoResult]
  112. QueryJobUptime(start, end time.Time) *Future[UptimeResult]
  113. QueryJobLabels(start, end time.Time) *Future[LabelsResult]
  114. QueryJobAnnotations(start, end time.Time) *Future[AnnotationsResult]
  115. // CronJob
  116. QueryCronJobInfo(start, end time.Time) *Future[CronJobInfoResult]
  117. QueryCronJobUptime(start, end time.Time) *Future[UptimeResult]
  118. QueryCronJobLabels(start, end time.Time) *Future[LabelsResult]
  119. QueryCronJobAnnotations(start, end time.Time) *Future[AnnotationsResult]
  120. // ReplicaSet
  121. QueryReplicaSetInfo(start, end time.Time) *Future[ReplicaSetInfoResult]
  122. QueryReplicaSetUptime(start, end time.Time) *Future[UptimeResult]
  123. QueryReplicaSetLabels(start, end time.Time) *Future[LabelsResult]
  124. QueryReplicaSetAnnotations(start, end time.Time) *Future[AnnotationsResult]
  125. QueryReplicaSetOwners(start, end time.Time) *Future[OwnerResult]
  126. // Namespace
  127. QueryNamespaceInfo(start, end time.Time) *Future[NamespaceInfoResult]
  128. QueryNamespaceUptime(start, end time.Time) *Future[UptimeResult]
  129. // Service
  130. QueryServiceInfo(start, end time.Time) *Future[ServiceInfoResult]
  131. QueryServiceUptime(start, end time.Time) *Future[UptimeResult]
  132. QueryServiceSelectorLabels(start, end time.Time) *Future[ServiceLabelsResult]
  133. // Network Egress
  134. QueryNetZoneGiB(start, end time.Time) *Future[NetZoneGiBResult]
  135. QueryNetZonePricePerGiB(start, end time.Time) *Future[NetZonePricePerGiBResult]
  136. QueryNetRegionGiB(start, end time.Time) *Future[NetRegionGiBResult]
  137. QueryNetRegionPricePerGiB(start, end time.Time) *Future[NetRegionPricePerGiBResult]
  138. QueryNetInternetGiB(start, end time.Time) *Future[NetInternetGiBResult]
  139. QueryNetInternetPricePerGiB(start, end time.Time) *Future[NetInternetPricePerGiBResult]
  140. QueryNetInternetServiceGiB(start, end time.Time) *Future[NetInternetServiceGiBResult]
  141. QueryNetNatGatewayPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  142. QueryNetNatGatewayGiB(start, end time.Time) *Future[NetNatGatewayGiBResult]
  143. QueryNetTransferBytes(start, end time.Time) *Future[NetTransferBytesResult]
  144. // Network Ingress
  145. QueryNetZoneIngressGiB(start, end time.Time) *Future[NetZoneIngressGiBResult]
  146. QueryNetRegionIngressGiB(start, end time.Time) *Future[NetRegionIngressGiBResult]
  147. QueryNetInternetIngressGiB(start, end time.Time) *Future[NetInternetIngressGiBResult]
  148. QueryNetInternetServiceIngressGiB(start, end time.Time) *Future[NetInternetServiceIngressGiBResult]
  149. QueryNetNatGatewayIngressPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  150. QueryNetNatGatewayIngressGiB(start, end time.Time) *Future[NetNatGatewayIngressGiBResult]
  151. QueryNetReceiveBytes(start, end time.Time) *Future[NetReceiveBytesResult]
  152. // Annotations
  153. QueryNamespaceAnnotations(start, end time.Time) *Future[NamespaceAnnotationsResult]
  154. QueryPodAnnotations(start, end time.Time) *Future[PodAnnotationsResult]
  155. // Labels
  156. QueryNodeLabels(start, end time.Time) *Future[NodeLabelsResult]
  157. QueryNamespaceLabels(start, end time.Time) *Future[NamespaceLabelsResult]
  158. QueryPodLabels(start, end time.Time) *Future[PodLabelsResult]
  159. QueryPodsWithDaemonSetOwner(start, end time.Time) *Future[PodsWithDaemonSetOwnerResult]
  160. QueryPodsWithJobOwner(start, end time.Time) *Future[PodsWithJobOwnerResult]
  161. // ReplicaSet -> Controller mapping
  162. QueryPodsWithReplicaSetOwner(start, end time.Time) *Future[PodsWithReplicaSetOwnerResult]
  163. QueryReplicaSetsWithoutOwners(start, end time.Time) *Future[ReplicaSetsWithoutOwnersResult]
  164. QueryReplicaSetsWithRollout(start, end time.Time) *Future[ReplicaSetsWithRolloutResult]
  165. // ResourceQuotas
  166. QueryResourceQuotaInfo(start, end time.Time) *Future[ResourceQuotaInfoResult]
  167. QueryResourceQuotaUptime(start, end time.Time) *Future[UptimeResult]
  168. QueryResourceQuotaSpecCPURequestAverage(start, end time.Time) *Future[ResourceResult]
  169. QueryResourceQuotaSpecCPURequestMax(start, end time.Time) *Future[ResourceResult]
  170. QueryResourceQuotaSpecRAMRequestAverage(start, end time.Time) *Future[ResourceResult]
  171. QueryResourceQuotaSpecRAMRequestMax(start, end time.Time) *Future[ResourceResult]
  172. QueryResourceQuotaSpecCPULimitAverage(start, end time.Time) *Future[ResourceResult]
  173. QueryResourceQuotaSpecCPULimitMax(start, end time.Time) *Future[ResourceResult]
  174. QueryResourceQuotaSpecRAMLimitAverage(start, end time.Time) *Future[ResourceResult]
  175. QueryResourceQuotaSpecRAMLimitMax(start, end time.Time) *Future[ResourceResult]
  176. QueryResourceQuotaStatusUsedCPURequestAverage(start, end time.Time) *Future[ResourceResult]
  177. QueryResourceQuotaStatusUsedCPURequestMax(start, end time.Time) *Future[ResourceResult]
  178. QueryResourceQuotaStatusUsedRAMRequestAverage(start, end time.Time) *Future[ResourceResult]
  179. QueryResourceQuotaStatusUsedRAMRequestMax(start, end time.Time) *Future[ResourceResult]
  180. QueryResourceQuotaStatusUsedCPULimitAverage(start, end time.Time) *Future[ResourceResult]
  181. QueryResourceQuotaStatusUsedCPULimitMax(start, end time.Time) *Future[ResourceResult]
  182. QueryResourceQuotaStatusUsedRAMLimitAverage(start, end time.Time) *Future[ResourceResult]
  183. QueryResourceQuotaStatusUsedRAMLimitMax(start, end time.Time) *Future[ResourceResult]
  184. // Data Coverage Query
  185. QueryDataCoverage(limitDays int) (time.Time, time.Time, error)
  186. }
  187. type OpenCostDataSource interface {
  188. // RegisterEndPoints registers any custom endpoints that can be used for diagnostics or debug purposes.
  189. RegisterEndPoints(router *httprouter.Router)
  190. // RegisterDiagnostics registers any custom data source diagnostics with the `DiagnosticService` that can
  191. // be used to report externally.
  192. RegisterDiagnostics(diagService diagnostics.DiagnosticService)
  193. // Metrics returns a MetricsQuerier that can be used to query historical metrics data from the data source.
  194. Metrics() MetricsQuerier
  195. // ClusterMap returns a mapping of cluster identifier to ClusterInfo for all known clusters (local only for
  196. // single cluster deployments).
  197. ClusterMap() clusters.ClusterMap
  198. // ClusterInfo returns the ClusterInfoProvider for the local cluster.
  199. ClusterInfo() clusters.ClusterInfoProvider
  200. BatchDuration() time.Duration
  201. Resolution() time.Duration
  202. }