1
0
mirror of https://github.com/rancher/steve.git synced 2025-05-04 05:56:42 +00:00
steve/pkg/stores/metrics/metrics_store.go

67 lines
2.5 KiB
Go
Raw Normal View History

2022-02-03 00:54:08 +00:00
package metrics
import (
"time"
"github.com/rancher/apiserver/pkg/types"
"github.com/rancher/steve/pkg/metrics"
)
type Store struct {
Store types.Store
}
func NewMetricsStore(store types.Store) *Store {
return &Store{
Store: store,
}
}
func (s *Store) ByID(apiOp *types.APIRequest, schema *types.APISchema, id string) (types.APIObject, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiObject, err := s.Store.ByID(apiOp, schema, id)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiObject, err
}
func (s *Store) List(apiOp *types.APIRequest, schema *types.APISchema) (types.APIObjectList, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiObjectList, err := s.Store.List(apiOp, schema)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiObjectList, err
}
func (s *Store) Create(apiOp *types.APIRequest, schema *types.APISchema, data types.APIObject) (types.APIObject, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiObject, err := s.Store.Create(apiOp, schema, data)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiObject, err
}
func (s *Store) Update(apiOp *types.APIRequest, schema *types.APISchema, data types.APIObject, id string) (types.APIObject, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiObject, err := s.Store.Update(apiOp, schema, data, id)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiObject, err
}
func (s *Store) Delete(apiOp *types.APIRequest, schema *types.APISchema, id string) (types.APIObject, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiObject, err := s.Store.Delete(apiOp, schema, id)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiObject, err
}
func (s *Store) Watch(apiOp *types.APIRequest, schema *types.APISchema, w types.WatchRequest) (chan types.APIEvent, error) {
m := metrics.MetricLogger{Resource: apiOp.Schema.ID, Method: apiOp.Method}
storeStart := time.Now()
apiEvent, err := s.Store.Watch(apiOp, schema, w)
m.RecordProxyStoreResponseTime(err, float64(time.Since(storeStart).Milliseconds()))
return apiEvent, err
}