Documentation
¶
Index ¶
- Constants
- func GetCustomCostWindowAccumulation(window opencost.Window, accumulate opencost.AccumulateOption) (opencost.Window, opencost.AccumulateOption, error)
- func NewCustomCostFilterParser() ast.FilterParser
- func NewCustomCostMatchCompiler() *matcher.MatchCompiler[*CustomCost]
- type CostResponse
- type CostTimeseriesRequest
- type CostTimeseriesResponse
- type CostTotalRequest
- type CostType
- type CustomCost
- type CustomCostIngestor
- func (ing *CustomCostIngestor) BuildWindow(start, end time.Time)
- func (ing *CustomCostIngestor) LoadWindow(start, end time.Time)
- func (ing *CustomCostIngestor) Rebuild(domain string) error
- func (ing *CustomCostIngestor) Start(rebuild bool)
- func (ing *CustomCostIngestor) Status() IngestorStatus
- func (ing *CustomCostIngestor) Stop()
- type CustomCostIngestorConfig
- type CustomCostProperty
- type CustomCostSet
- type IngestorStatus
- type MemoryRepository
- func (m *MemoryRepository) Expire(limit time.Time) error
- func (m *MemoryRepository) Get(startTime time.Time, domain string) (*pb.CustomCostResponse, error)
- func (m *MemoryRepository) Has(startTime time.Time, domain string) (bool, error)
- func (m *MemoryRepository) Keys() ([]string, error)
- func (m *MemoryRepository) Put(ccr *pb.CustomCostResponse) error
- type PipelineService
- func (s *PipelineService) GetCustomCostRebuildHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
- func (s *PipelineService) GetCustomCostStatusHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
- func (dp *PipelineService) Status() Status
- func (ps *PipelineService) Stop()
- type Querier
- type QueryService
- type Repository
- type RepositoryQuerier
- type SortDirection
- type SortProperty
- type Status
Constants ¶
const ( CustomCostZoneProp CustomCostProperty = "zone" CustomCostAccountNameProp = "accountName" CustomCostChargeCategoryProp = "chargeCategory" CustomCostDescriptionProp = "description" CustomCostResourceNameProp = "resourceName" CustomCostResourceTypeProp = "resourceType" CustomCostProviderIdProp = "providerId" CustomCostUsageUnitProp = "usageUnit" CustomCostDomainProp = "domain" CustomCostCostSourceProp = "costSource" )
const ( CostTypeBlended CostType = "blended" CostTypeList CostType = "list" CostTypeBilled CostType = "billed" SortPropertyCost SortProperty = "cost" SortPropertyAggregate SortProperty = "aggregate" SortPropertyCostType SortProperty = "costType" SortDirectionAsc SortDirection = "asc" SortDirectionDesc SortDirection = "desc" )
Variables ¶
This section is empty.
Functions ¶
func GetCustomCostWindowAccumulation ¶
func GetCustomCostWindowAccumulation(window opencost.Window, accumulate opencost.AccumulateOption) (opencost.Window, opencost.AccumulateOption, error)
func NewCustomCostFilterParser ¶
func NewCustomCostFilterParser() ast.FilterParser
NewCustomCostFilterParser creates a new `ast.FilterParser` implementation which uses CustomCost specific fields
func NewCustomCostMatchCompiler ¶
func NewCustomCostMatchCompiler() *matcher.MatchCompiler[*CustomCost]
Types ¶
type CostResponse ¶
type CostResponse struct {
Window opencost.Window `json:"window"`
TotalCost float32 `json:"totalCost"`
TotalCostType CostType `json:"totalCostType"`
CustomCosts []*CustomCost `json:"customCosts"`
}
func NewCostResponse ¶
func NewCostResponse(ccs *CustomCostSet, costType CostType) *CostResponse
type CostTimeseriesRequest ¶
type CostTimeseriesRequest struct {
Start time.Time
End time.Time
AggregateBy []CustomCostProperty
Accumulate opencost.AccumulateOption
Filter filter.Filter
CostType CostType
SortBy SortProperty
SortDirection SortDirection
}
func ParseCustomCostTimeseriesRequest ¶
func ParseCustomCostTimeseriesRequest(qp mapper.PrimitiveMap) (*CostTimeseriesRequest, error)
type CostTimeseriesResponse ¶
type CostTimeseriesResponse struct {
Window opencost.Window `json:"window"`
Timeseries []*CostResponse `json:"timeseries"`
}
type CostTotalRequest ¶
type CostTotalRequest struct {
Start time.Time
End time.Time
AggregateBy []CustomCostProperty
Accumulate opencost.AccumulateOption
Filter filter.Filter
CostType CostType
SortBy SortProperty
SortDirection SortDirection
}
func ParseCustomCostTotalRequest ¶
func ParseCustomCostTotalRequest(qp mapper.PrimitiveMap) (*CostTotalRequest, error)
type CustomCost ¶
type CustomCost struct {
Id string `json:"id"`
Zone string `json:"zone"`
AccountName string `json:"account_name"`
ChargeCategory string `json:"charge_category"`
Description string `json:"description"`
ResourceName string `json:"resource_name"`
ResourceType string `json:"resource_type"`
ProviderId string `json:"provider_id"`
Cost float32 `json:"cost"`
ListUnitPrice float32 `json:"list_unit_price"`
UsageQuantity float32 `json:"usage_quantity"`
UsageUnit string `json:"usage_unit"`
Domain string `json:"domain"`
CostSource string `json:"cost_source"`
Aggregate string `json:"aggregate"`
CostType CostType `json:"cost_type"`
}
func ParseCustomCostResponse ¶
func ParseCustomCostResponse(ccResponse *pb.CustomCostResponse, costType CostType) []*CustomCost
func (*CustomCost) Add ¶
func (cc *CustomCost) Add(other *CustomCost)
type CustomCostIngestor ¶
type CustomCostIngestor struct {
// contains filtered or unexported fields
}
func NewCustomCostIngestor ¶
func NewCustomCostIngestor(ingestorConfig *CustomCostIngestorConfig, repo Repository, plugins map[string]*plugin.Client, res time.Duration) (*CustomCostIngestor, error)
NewCustomCostIngestor is an initializer for ingestor
func (*CustomCostIngestor) BuildWindow ¶
func (ing *CustomCostIngestor) BuildWindow(start, end time.Time)
func (*CustomCostIngestor) LoadWindow ¶
func (ing *CustomCostIngestor) LoadWindow(start, end time.Time)
func (*CustomCostIngestor) Rebuild ¶
func (ing *CustomCostIngestor) Rebuild(domain string) error
func (*CustomCostIngestor) Start ¶
func (ing *CustomCostIngestor) Start(rebuild bool)
func (*CustomCostIngestor) Status ¶
func (ing *CustomCostIngestor) Status() IngestorStatus
Status returns an IngestorStatus that describes the current state of the ingestor
func (*CustomCostIngestor) Stop ¶
func (ing *CustomCostIngestor) Stop()
type CustomCostIngestorConfig ¶
type CustomCostIngestorConfig struct {
MonthToDateRunInterval int
HourlyDuration, DailyDuration time.Duration
DailyQueryWindow, HourlyQueryWindow time.Duration
PluginConfigDir, PluginExecutableDir string
}
CustomCost IngestorConfig is a configuration struct for an Ingestor
func DefaultIngestorConfiguration ¶
func DefaultIngestorConfiguration() CustomCostIngestorConfig
DefaultIngestorConfiguration retrieves an CustomCostIngestorConfig from env variables
type CustomCostProperty ¶
type CustomCostProperty string
func ParseCustomCostProperties ¶
func ParseCustomCostProperties(props []string) ([]CustomCostProperty, error)
func ParseCustomCostProperty ¶
func ParseCustomCostProperty(text string) (CustomCostProperty, error)
type CustomCostSet ¶
type CustomCostSet struct {
CustomCosts []*CustomCost
Window opencost.Window
}
func NewCustomCostSet ¶
func NewCustomCostSet(window opencost.Window) *CustomCostSet
func (*CustomCostSet) Add ¶
func (ccs *CustomCostSet) Add(customCost *CustomCost)
func (*CustomCostSet) Aggregate ¶
func (ccs *CustomCostSet) Aggregate(aggregateBy []CustomCostProperty) error
func (*CustomCostSet) Sort ¶ added in v1.113.0
func (ccs *CustomCostSet) Sort(sortBy SortProperty, sortDirection SortDirection)
type IngestorStatus ¶
type IngestorStatus struct {
Created time.Time
LastRun time.Time
NextRun time.Time
Runs int
Coverage map[string]opencost.Window
RefreshRate time.Duration
}
IngestorStatus includes diagnostic values for a given Ingestor
type MemoryRepository ¶
type MemoryRepository struct {
// contains filtered or unexported fields
}
MemoryRepository is an implementation of Repository that uses a map keyed on config key and window start along with a RWMutex to make it threadsafe
func NewMemoryRepository ¶
func NewMemoryRepository() *MemoryRepository
func (*MemoryRepository) Expire ¶
func (m *MemoryRepository) Expire(limit time.Time) error
Expire deletes all items in the map with a start time before the given limit
func (*MemoryRepository) Get ¶
func (m *MemoryRepository) Get(startTime time.Time, domain string) (*pb.CustomCostResponse, error)
func (*MemoryRepository) Keys ¶
func (m *MemoryRepository) Keys() ([]string, error)
func (*MemoryRepository) Put ¶
func (m *MemoryRepository) Put(ccr *pb.CustomCostResponse) error
type PipelineService ¶
type PipelineService struct {
// contains filtered or unexported fields
}
PipelineService exposes CustomCost pipeline controls and diagnostics endpoints
func NewPipelineService ¶
func NewPipelineService(hourlyrepo, dailyrepo Repository, ingConf CustomCostIngestorConfig) (*PipelineService, error)
NewPipelineService is a constructor for a PipelineService
func (*PipelineService) GetCustomCostRebuildHandler ¶
func (s *PipelineService) GetCustomCostRebuildHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
GetCustomCostRebuildHandler creates a handler from a http request which initiates a rebuild of custom cost pipeline, if a domain is provided then it only rebuilds the specified billing domain
func (*PipelineService) GetCustomCostStatusHandler ¶
func (s *PipelineService) GetCustomCostStatusHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
GetCustomCostStatusHandler creates a handler from a http request which returns the custom cost ingestor status
func (*PipelineService) Status ¶
func (dp *PipelineService) Status() Status
Status gives a combined view of the state of configs and the ingestor status
func (*PipelineService) Stop ¶ added in v1.120.0
func (ps *PipelineService) Stop()
Stop gracefully shuts down both hourly and daily ingestors. Both ingestors may reference the same plugin clients, so Kill() may be invoked multiple times per plugin, which is safe per the go-plugin library.
type Querier ¶
type Querier interface {
QueryTotal(ctx context.Context, request CostTotalRequest) (*CostResponse, error)
QueryTimeseries(ctx context.Context, request CostTimeseriesRequest) (*CostTimeseriesResponse, error)
}
type QueryService ¶
type QueryService struct {
Querier Querier
}
func NewQueryService ¶
func NewQueryService(querier Querier) *QueryService
func (*QueryService) GetCustomCostTimeseriesHandler ¶
func (qs *QueryService) GetCustomCostTimeseriesHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
func (*QueryService) GetCustomCostTotalHandler ¶
func (qs *QueryService) GetCustomCostTotalHandler() func(w http.ResponseWriter, r *http.Request, ps httprouter.Params)
type Repository ¶
type Repository interface {
Has(time.Time, string) (bool, error)
Get(time.Time, string) (*pb.CustomCostResponse, error)
Keys() ([]string, error)
Put(*pb.CustomCostResponse) error
Expire(time.Time) error
}
Repository is an interface for storing and retrieving CustomCost data
type RepositoryQuerier ¶
type RepositoryQuerier struct {
// contains filtered or unexported fields
}
func NewRepositoryQuerier ¶
func NewRepositoryQuerier(hourlyRepo, dailyRepo Repository, hourlyDuration, dailyDuration time.Duration) *RepositoryQuerier
func (*RepositoryQuerier) QueryTimeseries ¶
func (rq *RepositoryQuerier) QueryTimeseries(ctx context.Context, request CostTimeseriesRequest) (*CostTimeseriesResponse, error)
func (*RepositoryQuerier) QueryTotal ¶
func (rq *RepositoryQuerier) QueryTotal(ctx context.Context, request CostTotalRequest) (*CostResponse, error)
type SortDirection ¶ added in v1.113.0
type SortDirection string
func ParseSortDirection ¶ added in v1.113.0
func ParseSortDirection(sortDirStr string) (SortDirection, error)
type SortProperty ¶ added in v1.113.0
type SortProperty string
func ParseSortBy ¶ added in v1.113.0
func ParseSortBy(sortByStr string) (SortProperty, error)
type Status ¶
type Status struct {
Enabled bool `json:"enabled"`
Domains []string `json:"domains"`
Key string `json:"key,omitempty"`
Source string `json:"source,omitempty"`
Provider string `json:"provider,omitempty"`
Active bool `json:"active,omitempty"`
Valid bool `json:"valid,omitempty"`
LastRun time.Time `json:"lastRun,omitempty"`
NextRun time.Time `json:"nextRun,omitempty"`
RefreshRateDaily string `json:"RefreshRateDaily,omitempty"`
RefreshRateHourly string `json:"RefreshRateHourly,omitempty"`
Created time.Time `json:"created,omitempty"`
Runs int `json:"runs,omitempty"`
CoverageHourly map[string]opencost.Window `json:"coverageHourly,omitempty"`
CoverageDaily map[string]opencost.Window `json:"coverageDaily,omitempty"`
ConnectionStatus string `json:"connectionStatus,omitempty"`
}
Status gives the details and metadata of a CustomCost integration