datasource.go 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. QueryPVActiveMinutes(start, end time.Time) *Future[PVActiveMinutesResult]
  11. QueryPVUsedAverage(start, end time.Time) *Future[PVUsedAvgResult]
  12. QueryPVUsedMax(start, end time.Time) *Future[PVUsedMaxResult]
  13. // Local Cluster Disks
  14. QueryLocalStorageActiveMinutes(start, end time.Time) *Future[LocalStorageActiveMinutesResult]
  15. QueryLocalStorageCost(start, end time.Time) *Future[LocalStorageCostResult]
  16. QueryLocalStorageUsedCost(start, end time.Time) *Future[LocalStorageUsedCostResult]
  17. QueryLocalStorageUsedAvg(start, end time.Time) *Future[LocalStorageUsedAvgResult]
  18. QueryLocalStorageUsedMax(start, end time.Time) *Future[LocalStorageUsedMaxResult]
  19. QueryLocalStorageBytes(start, end time.Time) *Future[LocalStorageBytesResult]
  20. // Nodes
  21. QueryNodeActiveMinutes(start, end time.Time) *Future[NodeActiveMinutesResult]
  22. QueryNodeCPUCoresCapacity(start, end time.Time) *Future[NodeCPUCoresCapacityResult]
  23. QueryNodeCPUCoresAllocatable(start, end time.Time) *Future[NodeCPUCoresAllocatableResult]
  24. QueryNodeRAMBytesCapacity(start, end time.Time) *Future[NodeRAMBytesCapacityResult]
  25. QueryNodeRAMBytesAllocatable(start, end time.Time) *Future[NodeRAMBytesAllocatableResult]
  26. QueryNodeGPUCount(start, end time.Time) *Future[NodeGPUCountResult]
  27. QueryNodeCPUModeTotal(start, end time.Time) *Future[NodeCPUModeTotalResult]
  28. QueryNodeIsSpot(start, end time.Time) *Future[NodeIsSpotResult]
  29. QueryNodeRAMSystemPercent(start, end time.Time) *Future[NodeRAMSystemPercentResult]
  30. QueryNodeRAMUserPercent(start, end time.Time) *Future[NodeRAMUserPercentResult]
  31. // Load Balancers
  32. QueryLBActiveMinutes(start, end time.Time) *Future[LBActiveMinutesResult]
  33. QueryLBPricePerHr(start, end time.Time) *Future[LBPricePerHrResult]
  34. // Cluster Management
  35. QueryClusterUptime(start, end time.Time) *Future[UptimeResult]
  36. QueryClusterManagementDuration(start, end time.Time) *Future[ClusterManagementDurationResult]
  37. QueryClusterManagementPricePerHr(start, end time.Time) *Future[ClusterManagementPricePerHrResult]
  38. // Pods
  39. QueryPods(start, end time.Time) *Future[PodsResult]
  40. QueryPodsUID(start, end time.Time) *Future[PodsResult]
  41. // RAM
  42. QueryRAMBytesAllocated(start, end time.Time) *Future[RAMBytesAllocatedResult]
  43. QueryRAMRequests(start, end time.Time) *Future[RAMRequestsResult]
  44. QueryRAMLimits(start, end time.Time) *Future[RAMLimitsResult]
  45. QueryRAMUsageAvg(start, end time.Time) *Future[RAMUsageAvgResult]
  46. QueryRAMUsageMax(start, end time.Time) *Future[RAMUsageMaxResult]
  47. QueryNodeRAMPricePerGiBHr(start, end time.Time) *Future[NodeRAMPricePerGiBHrResult]
  48. // CPU
  49. QueryCPUCoresAllocated(start, end time.Time) *Future[CPUCoresAllocatedResult]
  50. QueryCPURequests(start, end time.Time) *Future[CPURequestsResult]
  51. QueryCPULimits(start, end time.Time) *Future[CPULimitsResult]
  52. QueryCPUUsageAvg(start, end time.Time) *Future[CPUUsageAvgResult]
  53. QueryCPUUsageMax(start, end time.Time) *Future[CPUUsageMaxResult]
  54. QueryNodeCPUPricePerHr(start, end time.Time) *Future[NodeCPUPricePerHrResult]
  55. // GPU
  56. QueryGPUsAllocated(start, end time.Time) *Future[GPUsAllocatedResult]
  57. QueryGPUsRequested(start, end time.Time) *Future[GPUsRequestedResult]
  58. QueryGPUsUsageAvg(start, end time.Time) *Future[GPUsUsageAvgResult]
  59. QueryGPUsUsageMax(start, end time.Time) *Future[GPUsUsageMaxResult]
  60. QueryNodeGPUPricePerHr(start, end time.Time) *Future[NodeGPUPricePerHrResult]
  61. QueryGPUInfo(start, end time.Time) *Future[GPUInfoResult]
  62. QueryIsGPUShared(start, end time.Time) *Future[IsGPUSharedResult]
  63. // PVC
  64. QueryPodPVCAllocation(start, end time.Time) *Future[PodPVCAllocationResult]
  65. QueryPVCBytesRequested(start, end time.Time) *Future[PVCBytesRequestedResult]
  66. QueryPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  67. // PV
  68. QueryPVBytes(start, end time.Time) *Future[PVBytesResult]
  69. QueryPVPricePerGiBHour(start, end time.Time) *Future[PVPricePerGiBHourResult]
  70. QueryPVInfo(start, end time.Time) *Future[PVInfoResult]
  71. // Namespace
  72. QueryNamespaceUptime(start, end time.Time) *Future[UptimeResult]
  73. // Network Egress
  74. QueryNetZoneGiB(start, end time.Time) *Future[NetZoneGiBResult]
  75. QueryNetZonePricePerGiB(start, end time.Time) *Future[NetZonePricePerGiBResult]
  76. QueryNetRegionGiB(start, end time.Time) *Future[NetRegionGiBResult]
  77. QueryNetRegionPricePerGiB(start, end time.Time) *Future[NetRegionPricePerGiBResult]
  78. QueryNetInternetGiB(start, end time.Time) *Future[NetInternetGiBResult]
  79. QueryNetInternetPricePerGiB(start, end time.Time) *Future[NetInternetPricePerGiBResult]
  80. QueryNetInternetServiceGiB(start, end time.Time) *Future[NetInternetServiceGiBResult]
  81. QueryNetNatGatewayPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  82. QueryNetNatGatewayGiB(start, end time.Time) *Future[NetNatGatewayGiBResult]
  83. QueryNetTransferBytes(start, end time.Time) *Future[NetTransferBytesResult]
  84. // Network Ingress
  85. QueryNetZoneIngressGiB(start, end time.Time) *Future[NetZoneIngressGiBResult]
  86. QueryNetRegionIngressGiB(start, end time.Time) *Future[NetRegionIngressGiBResult]
  87. QueryNetInternetIngressGiB(start, end time.Time) *Future[NetInternetIngressGiBResult]
  88. QueryNetInternetServiceIngressGiB(start, end time.Time) *Future[NetInternetServiceIngressGiBResult]
  89. QueryNetNatGatewayIngressPricePerGiB(start, end time.Time) *Future[NetNatGatewayPricePerGiBResult]
  90. QueryNetNatGatewayIngressGiB(start, end time.Time) *Future[NetNatGatewayIngressGiBResult]
  91. QueryNetReceiveBytes(start, end time.Time) *Future[NetReceiveBytesResult]
  92. // Annotations
  93. QueryNamespaceAnnotations(start, end time.Time) *Future[NamespaceAnnotationsResult]
  94. QueryPodAnnotations(start, end time.Time) *Future[PodAnnotationsResult]
  95. // Labels
  96. QueryNodeLabels(start, end time.Time) *Future[NodeLabelsResult]
  97. QueryNamespaceLabels(start, end time.Time) *Future[NamespaceLabelsResult]
  98. QueryPodLabels(start, end time.Time) *Future[PodLabelsResult]
  99. QueryServiceLabels(start, end time.Time) *Future[ServiceLabelsResult]
  100. QueryDeploymentLabels(start, end time.Time) *Future[DeploymentLabelsResult]
  101. QueryStatefulSetLabels(start, end time.Time) *Future[StatefulSetLabelsResult]
  102. QueryDaemonSetLabels(start, end time.Time) *Future[DaemonSetLabelsResult]
  103. QueryJobLabels(start, end time.Time) *Future[JobLabelsResult]
  104. // ReplicaSet -> Controller mapping
  105. QueryPodsWithReplicaSetOwner(start, end time.Time) *Future[PodsWithReplicaSetOwnerResult]
  106. QueryReplicaSetsWithoutOwners(start, end time.Time) *Future[ReplicaSetsWithoutOwnersResult]
  107. QueryReplicaSetsWithRollout(start, end time.Time) *Future[ReplicaSetsWithRolloutResult]
  108. // ResourceQuotas
  109. QueryResourceQuotaUptime(start, end time.Time) *Future[UptimeResult]
  110. QueryResourceQuotaSpecCPURequestAverage(start, end time.Time) *Future[ResourceQuotaSpecCPURequestAvgResult]
  111. QueryResourceQuotaSpecCPURequestMax(start, end time.Time) *Future[ResourceQuotaSpecCPURequestMaxResult]
  112. QueryResourceQuotaSpecRAMRequestAverage(start, end time.Time) *Future[ResourceQuotaSpecRAMRequestAvgResult]
  113. QueryResourceQuotaSpecRAMRequestMax(start, end time.Time) *Future[ResourceQuotaSpecRAMRequestMaxResult]
  114. QueryResourceQuotaSpecCPULimitAverage(start, end time.Time) *Future[ResourceQuotaSpecCPULimitAvgResult]
  115. QueryResourceQuotaSpecCPULimitMax(start, end time.Time) *Future[ResourceQuotaSpecCPULimitMaxResult]
  116. QueryResourceQuotaSpecRAMLimitAverage(start, end time.Time) *Future[ResourceQuotaSpecRAMLimitAvgResult]
  117. QueryResourceQuotaSpecRAMLimitMax(start, end time.Time) *Future[ResourceQuotaSpecRAMLimitMaxResult]
  118. QueryResourceQuotaStatusUsedCPURequestAverage(start, end time.Time) *Future[ResourceQuotaStatusUsedCPURequestAvgResult]
  119. QueryResourceQuotaStatusUsedCPURequestMax(start, end time.Time) *Future[ResourceQuotaStatusUsedCPURequestMaxResult]
  120. QueryResourceQuotaStatusUsedRAMRequestAverage(start, end time.Time) *Future[ResourceQuotaStatusUsedRAMRequestAvgResult]
  121. QueryResourceQuotaStatusUsedRAMRequestMax(start, end time.Time) *Future[ResourceQuotaStatusUsedRAMRequestMaxResult]
  122. QueryResourceQuotaStatusUsedCPULimitAverage(start, end time.Time) *Future[ResourceQuotaStatusUsedCPULimitAvgResult]
  123. QueryResourceQuotaStatusUsedCPULimitMax(start, end time.Time) *Future[ResourceQuotaStatusUsedCPULimitMaxResult]
  124. QueryResourceQuotaStatusUsedRAMLimitAverage(start, end time.Time) *Future[ResourceQuotaStatusUsedRAMLimitAvgResult]
  125. QueryResourceQuotaStatusUsedRAMLimitMax(start, end time.Time) *Future[ResourceQuotaStatusUsedRAMLimitMaxResult]
  126. // Data Coverage Query
  127. QueryDataCoverage(limitDays int) (time.Time, time.Time, error)
  128. }
  129. type OpenCostDataSource interface {
  130. // RegisterEndPoints registers any custom endpoints that can be used for diagnostics or debug purposes.
  131. RegisterEndPoints(router *httprouter.Router)
  132. // RegisterDiagnostics registers any custom data source diagnostics with the `DiagnosticService` that can
  133. // be used to report externally.
  134. RegisterDiagnostics(diagService diagnostics.DiagnosticService)
  135. // Metrics returns a MetricsQuerier that can be used to query historical metrics data from the data source.
  136. Metrics() MetricsQuerier
  137. // ClusterMap returns a mapping of cluster identifier to ClusterInfo for all known clusters (local only for
  138. // single cluster deployments).
  139. ClusterMap() clusters.ClusterMap
  140. // ClusterInfo returns the ClusterInfoProvider for the local cluster.
  141. ClusterInfo() clusters.ClusterInfoProvider
  142. BatchDuration() time.Duration
  143. Resolution() time.Duration
  144. }