datasource.go 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package source
  2. import (
  3. "time"
  4. "github.com/julienschmidt/httprouter"
  5. "github.com/opencost/opencost/core/pkg/clusters"
  6. )
  7. type MetricsQuerier interface {
  8. // Cluster Disks
  9. QueryPVActiveMinutes(start, end time.Time) *Future[PVActiveMinutesResult]
  10. QueryPVUsedAverage(start, end time.Time) *Future[PVUsedAvgResult]
  11. QueryPVUsedMax(start, end time.Time) *Future[PVUsedMaxResult]
  12. // Local Cluster Disks
  13. QueryLocalStorageActiveMinutes(start, end time.Time) *Future[LocalStorageActiveMinutesResult]
  14. QueryLocalStorageCost(start, end time.Time) *Future[LocalStorageCostResult]
  15. QueryLocalStorageUsedCost(start, end time.Time) *Future[LocalStorageUsedCostResult]
  16. QueryLocalStorageUsedAvg(start, end time.Time) *Future[LocalStorageUsedAvgResult]
  17. QueryLocalStorageUsedMax(start, end time.Time) *Future[LocalStorageUsedMaxResult]
  18. QueryLocalStorageBytes(start, end time.Time) *Future[LocalStorageBytesResult]
  19. // Nodes
  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. // Load Balancers
  31. QueryLBActiveMinutes(start, end time.Time) *Future[LBActiveMinutesResult]
  32. QueryLBPricePerHr(start, end time.Time) *Future[LBPricePerHrResult]
  33. // Cluster Management
  34. QueryClusterManagementDuration(start, end time.Time) *Future[ClusterManagementDurationResult]
  35. QueryClusterManagementPricePerHr(start, end time.Time) *Future[ClusterManagementPricePerHrResult]
  36. // Pods
  37. QueryPods(start, end time.Time) *Future[PodsResult]
  38. QueryPodsUID(start, end time.Time) *Future[PodsResult]
  39. // RAM
  40. QueryRAMBytesAllocated(start, end time.Time) *Future[RAMBytesAllocatedResult]
  41. QueryRAMRequests(start, end time.Time) *Future[RAMRequestsResult]
  42. QueryRAMUsageAvg(start, end time.Time) *Future[RAMUsageAvgResult]
  43. QueryRAMUsageMax(start, end time.Time) *Future[RAMUsageMaxResult]
  44. QueryNodeRAMPricePerGiBHr(start, end time.Time) *Future[NodeRAMPricePerGiBHrResult]
  45. // CPU
  46. QueryCPUCoresAllocated(start, end time.Time) *Future[CPUCoresAllocatedResult]
  47. QueryCPURequests(start, end time.Time) *Future[CPURequestsResult]
  48. QueryCPUUsageAvg(start, end time.Time) *Future[CPUUsageAvgResult]
  49. QueryCPUUsageMax(start, end time.Time) *Future[CPUUsageMaxResult]
  50. QueryNodeCPUPricePerHr(start, end time.Time) *Future[NodeCPUPricePerHrResult]
  51. // GPU
  52. QueryGPUsAllocated(start, end time.Time) *Future[GPUsAllocatedResult]
  53. QueryGPUsRequested(start, end time.Time) *Future[GPUsRequestedResult]
  54. QueryGPUsUsageAvg(start, end time.Time) *Future[GPUsUsageAvgResult]
  55. QueryGPUsUsageMax(start, end time.Time) *Future[GPUsUsageMaxResult]
  56. QueryNodeGPUPricePerHr(start, end time.Time) *Future[NodeGPUPricePerHrResult]
  57. QueryGPUInfo(start, end time.Time) *Future[GPUInfoResult]
  58. QueryIsGPUShared(start, end time.Time) *Future[IsGPUSharedResult]
  59. // PVC
  60. QueryPodPVCAllocation(start, end time.Time) *Future[PodPVCAllocationResult]
  61. QueryPVCBytesRequested(start, end time.Time) *Future[PVCBytesRequestedResult]
  62. QueryPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  63. // PV
  64. QueryPVBytes(start, end time.Time) *Future[PVBytesResult]
  65. QueryPVPricePerGiBHour(start, end time.Time) *Future[PVPricePerGiBHourResult]
  66. QueryPVInfo(start, end time.Time) *Future[PVInfoResult]
  67. // Network Egress
  68. QueryNetZoneGiB(start, end time.Time) *Future[NetZoneGiBResult]
  69. QueryNetZonePricePerGiB(start, end time.Time) *Future[NetZonePricePerGiBResult]
  70. QueryNetRegionGiB(start, end time.Time) *Future[NetRegionGiBResult]
  71. QueryNetRegionPricePerGiB(start, end time.Time) *Future[NetRegionPricePerGiBResult]
  72. QueryNetInternetGiB(start, end time.Time) *Future[NetInternetGiBResult]
  73. QueryNetInternetPricePerGiB(start, end time.Time) *Future[NetInternetPricePerGiBResult]
  74. QueryNetInternetServiceGiB(start, end time.Time) *Future[NetInternetServiceGiBResult]
  75. QueryNetTransferBytes(start, end time.Time) *Future[NetTransferBytesResult]
  76. // Network Ingress
  77. QueryNetZoneIngressGiB(start, end time.Time) *Future[NetZoneIngressGiBResult]
  78. QueryNetRegionIngressGiB(start, end time.Time) *Future[NetRegionIngressGiBResult]
  79. QueryNetInternetIngressGiB(start, end time.Time) *Future[NetInternetIngressGiBResult]
  80. QueryNetInternetServiceIngressGiB(start, end time.Time) *Future[NetInternetServiceIngressGiBResult]
  81. QueryNetReceiveBytes(start, end time.Time) *Future[NetReceiveBytesResult]
  82. // Annotations
  83. QueryNamespaceAnnotations(start, end time.Time) *Future[NamespaceAnnotationsResult]
  84. QueryPodAnnotations(start, end time.Time) *Future[PodAnnotationsResult]
  85. // Labels
  86. QueryNodeLabels(start, end time.Time) *Future[NodeLabelsResult]
  87. QueryNamespaceLabels(start, end time.Time) *Future[NamespaceLabelsResult]
  88. QueryPodLabels(start, end time.Time) *Future[PodLabelsResult]
  89. QueryServiceLabels(start, end time.Time) *Future[ServiceLabelsResult]
  90. QueryDeploymentLabels(start, end time.Time) *Future[DeploymentLabelsResult]
  91. QueryStatefulSetLabels(start, end time.Time) *Future[StatefulSetLabelsResult]
  92. QueryDaemonSetLabels(start, end time.Time) *Future[DaemonSetLabelsResult]
  93. QueryJobLabels(start, end time.Time) *Future[JobLabelsResult]
  94. // ReplicaSet -> Controller mapping
  95. QueryPodsWithReplicaSetOwner(start, end time.Time) *Future[PodsWithReplicaSetOwnerResult]
  96. QueryReplicaSetsWithoutOwners(start, end time.Time) *Future[ReplicaSetsWithoutOwnersResult]
  97. QueryReplicaSetsWithRollout(start, end time.Time) *Future[ReplicaSetsWithRolloutResult]
  98. // Data Coverage Query
  99. QueryDataCoverage(limitDays int) (time.Time, time.Time, error)
  100. }
  101. type OpenCostDataSource interface {
  102. // RegisterEndPoints registers any custom endpoints that can be used for diagnostics or debug purposes.
  103. RegisterEndPoints(router *httprouter.Router)
  104. // Metrics returns a MetricsQuerier that can be used to query historical metrics data from the data source.
  105. Metrics() MetricsQuerier
  106. // ClusterMap returns a mapping of cluster identifier to ClusterInfo for all known clusters (local only for
  107. // single cluster deployments).
  108. ClusterMap() clusters.ClusterMap
  109. // ClusterInfo returns the ClusterInfoProvider for the local cluster.
  110. ClusterInfo() clusters.ClusterInfoProvider
  111. BatchDuration() time.Duration
  112. Resolution() time.Duration
  113. }