datasource.go 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package source
  2. import (
  3. "time"
  4. "github.com/julienschmidt/httprouter"
  5. "github.com/opencost/opencost/core/pkg/clusters"
  6. )
  7. type ClusterMetricsQuerier 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. QueryLocalStorageBytesByProvider(provider string, start, end time.Time) *Future[LocalStorageBytesByProviderResult]
  20. QueryLocalStorageUsedByProvider(provider string, start, end time.Time) *Future[LocalStorageUsedByProviderResult]
  21. // Nodes
  22. QueryNodeActiveMinutes(start, end time.Time) *Future[NodeActiveMinutesResult]
  23. QueryNodeCPUCoresCapacity(start, end time.Time) *Future[NodeCPUCoresCapacityResult]
  24. QueryNodeCPUCoresAllocatable(start, end time.Time) *Future[NodeCPUCoresAllocatableResult]
  25. QueryNodeRAMBytesCapacity(start, end time.Time) *Future[NodeRAMBytesCapacityResult]
  26. QueryNodeRAMBytesAllocatable(start, end time.Time) *Future[NodeRAMBytesAllocatableResult]
  27. QueryNodeGPUCount(start, end time.Time) *Future[NodeGPUCountResult]
  28. QueryNodeCPUModeTotal(start, end time.Time) *Future[NodeCPUModeTotalResult]
  29. QueryNodeIsSpot(start, end time.Time) *Future[NodeIsSpotResult]
  30. QueryNodeCPUModePercent(start, end time.Time) *Future[NodeCPUModePercentResult]
  31. QueryNodeRAMSystemPercent(start, end time.Time) *Future[NodeRAMSystemPercentResult]
  32. QueryNodeRAMUserPercent(start, end time.Time) *Future[NodeRAMUserPercentResult]
  33. // Load Balancers
  34. QueryLBActiveMinutes(start, end time.Time) *Future[LBActiveMinutesResult]
  35. QueryLBPricePerHr(start, end time.Time) *Future[LBPricePerHrResult]
  36. // Cluster Management
  37. QueryClusterManagementDuration(start, end time.Time) *Future[ClusterManagementDurationResult]
  38. QueryClusterManagementPricePerHr(start, end time.Time) *Future[ClusterManagementPricePerHrResult]
  39. // Cluster Costs
  40. QueryDataCount(start, end time.Time) *Future[DataCountResult]
  41. QueryTotalGPU(start, end time.Time) *Future[TotalGPUResult]
  42. QueryTotalCPU(start, end time.Time) *Future[TotalCPUResult]
  43. QueryTotalRAM(start, end time.Time) *Future[TotalRAMResult]
  44. QueryTotalStorage(start, end time.Time) *Future[TotalStorageResult]
  45. // Cluster Costs
  46. QueryClusterCores(start, end time.Time, step time.Duration) *Future[ClusterCoresResult]
  47. QueryClusterRAM(start, end time.Time, step time.Duration) *Future[ClusterRAMResult]
  48. QueryClusterStorage(start, end time.Time, step time.Duration) *Future[ClusterStorageResult]
  49. QueryClusterStorageByProvider(provider string, start, end time.Time, step time.Duration) *Future[ClusterStorageResult]
  50. QueryClusterTotal(start, end time.Time, step time.Duration) *Future[ClusterTotalResult]
  51. QueryClusterTotalByProvider(provider string, start, end time.Time, step time.Duration) *Future[ClusterTotalResult]
  52. QueryClusterNodes(start, end time.Time, step time.Duration) *Future[ClusterNodesResult]
  53. QueryClusterNodesByProvider(provider string, start, end time.Time, step time.Duration) *Future[ClusterNodesResult]
  54. }
  55. type AllocationMetricsQuerier interface {
  56. QueryPods(start, end time.Time) *Future[PodsResult]
  57. QueryPodsUID(start, end time.Time) *Future[PodsResult]
  58. QueryRAMBytesAllocated(start, end time.Time) *Future[RAMBytesAllocatedResult]
  59. QueryRAMRequests(start, end time.Time) *Future[RAMRequestsResult]
  60. QueryRAMUsageAvg(start, end time.Time) *Future[RAMUsageAvgResult]
  61. QueryRAMUsageMax(start, end time.Time) *Future[RAMUsageMaxResult]
  62. QueryNodeRAMPricePerGiBHr(start, end time.Time) *Future[NodeRAMPricePerGiBHrResult]
  63. QueryCPUCoresAllocated(start, end time.Time) *Future[CPUCoresAllocatedResult]
  64. QueryCPURequests(start, end time.Time) *Future[CPURequestsResult]
  65. QueryCPUUsageAvg(start, end time.Time) *Future[CPUUsageAvgResult]
  66. QueryCPUUsageMax(start, end time.Time) *Future[CPUUsageMaxResult]
  67. QueryNodeCPUPricePerHr(start, end time.Time) *Future[NodeCPUPricePerHrResult]
  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. QueryPodPVCAllocation(start, end time.Time) *Future[PodPVCAllocationResult]
  76. QueryPVCBytesRequested(start, end time.Time) *Future[PVCBytesRequestedResult]
  77. QueryPVCInfo(start, end time.Time) *Future[PVCInfoResult]
  78. QueryPVBytes(start, end time.Time) *Future[PVBytesResult]
  79. QueryPVPricePerGiBHour(start, end time.Time) *Future[PVPricePerGiBHourResult]
  80. QueryPVInfo(start, end time.Time) *Future[PVInfoResult]
  81. QueryNetZoneGiB(start, end time.Time) *Future[NetZoneGiBResult]
  82. QueryNetZonePricePerGiB(start, end time.Time) *Future[NetZonePricePerGiBResult]
  83. QueryNetRegionGiB(start, end time.Time) *Future[NetRegionGiBResult]
  84. QueryNetRegionPricePerGiB(start, end time.Time) *Future[NetRegionPricePerGiBResult]
  85. QueryNetInternetGiB(start, end time.Time) *Future[NetInternetGiBResult]
  86. QueryNetInternetPricePerGiB(start, end time.Time) *Future[NetInternetPricePerGiBResult]
  87. QueryNetReceiveBytes(start, end time.Time) *Future[NetReceiveBytesResult]
  88. QueryNetTransferBytes(start, end time.Time) *Future[NetTransferBytesResult]
  89. QueryNamespaceAnnotations(start, end time.Time) *Future[NamespaceAnnotationsResult]
  90. QueryPodAnnotations(start, end time.Time) *Future[PodAnnotationsResult]
  91. QueryNodeLabels(start, end time.Time) *Future[NodeLabelsResult]
  92. QueryNamespaceLabels(start, end time.Time) *Future[NamespaceLabelsResult]
  93. QueryPodLabels(start, end time.Time) *Future[PodLabelsResult]
  94. QueryServiceLabels(start, end time.Time) *Future[ServiceLabelsResult]
  95. QueryDeploymentLabels(start, end time.Time) *Future[DeploymentLabelsResult]
  96. QueryStatefulSetLabels(start, end time.Time) *Future[StatefulSetLabelsResult]
  97. QueryDaemonSetLabels(start, end time.Time) *Future[DaemonSetLabelsResult]
  98. QueryJobLabels(start, end time.Time) *Future[JobLabelsResult]
  99. QueryPodsWithReplicaSetOwner(start, end time.Time) *Future[PodsWithReplicaSetOwnerResult]
  100. QueryReplicaSetsWithoutOwners(start, end time.Time) *Future[ReplicaSetsWithoutOwnersResult]
  101. QueryReplicaSetsWithRollout(start, end time.Time) *Future[ReplicaSetsWithRolloutResult]
  102. QueryDataCoverage(limitDays int) (time.Time, time.Time, error)
  103. }
  104. type OpenCostDataSource interface {
  105. ClusterMetricsQuerier
  106. AllocationMetricsQuerier
  107. NewClusterMap(clusterInfoProvider clusters.ClusterInfoProvider) clusters.ClusterMap
  108. RegisterEndPoints(router *httprouter.Router)
  109. BatchDuration() time.Duration
  110. Resolution() time.Duration
  111. MetaData() map[string]string
  112. }