| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package services
- import (
- "sync"
- "github.com/julienschmidt/httprouter"
- "github.com/opencost/opencost/pkg/log"
- )
- // HTTPService defines an implementation prototype for an object capable of registering
- // endpoints on an http router which provide an service relevant to the cost-model.
- type HTTPService interface {
- // Register assigns the endpoints and returns an error on failure.
- Register(*httprouter.Router) error
- }
- // HTTPServices defines an implementation prototype for an object capable of managing and registering
- // predefined HTTPService routes
- type HTTPServices interface {
- // Add a HTTPService implementation for registration
- Add(service HTTPService)
- // RegisterAll registers all the services added with the provided router
- RegisterAll(*httprouter.Router) error
- }
- type defaultHTTPServices struct {
- sync.Mutex
- services []HTTPService
- }
- // Add a HTTPService implementation for
- func (dhs *defaultHTTPServices) Add(service HTTPService) {
- if service == nil {
- log.Warnf("Attempting to Add nil HTTPService")
- return
- }
- dhs.Lock()
- defer dhs.Unlock()
- dhs.services = append(dhs.services, service)
- }
- // RegisterAll registers all the services added with the provided router
- func (dhs *defaultHTTPServices) RegisterAll(router *httprouter.Router) error {
- dhs.Lock()
- defer dhs.Unlock()
- for _, svc := range dhs.services {
- svc.Register(router)
- }
- return nil
- }
- // NewCostModelServices creates an HTTPServices implementation containing any predefined
- // http services used with the cost-model
- func NewCostModelServices() HTTPServices {
- return &defaultHTTPServices{
- services: []HTTPService{
- NewClusterManagerService(),
- },
- }
- }
|