Skip to content
This repository has been archived by the owner on Oct 25, 2023. It is now read-only.

Commit

Permalink
feat(exporter): dothill_api metrics
Browse files Browse the repository at this point in the history
dothill_api_appliance_api_call and dothill_api_appliance_api_call_duration
  • Loading branch information
paullaffitte committed Mar 31, 2021
1 parent a7eb9a6 commit 31bf4c4
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 15 deletions.
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.16

require (
github.com/container-storage-interface/spec v1.3.0
github.com/enix/dothill-api-go v1.5.1
github.com/enix/dothill-api-go v1.6.0
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2
github.com/kubernetes-csi/csi-lib-iscsi v0.0.0-20200118015005-959f12c91ca8
github.com/kubernetes-csi/csi-test v0.0.0-20191016154743-6931aedb3df0
Expand All @@ -15,5 +15,7 @@ require (
k8s.io/klog v1.0.0
)

// replace github.com/enix/dothill-api-go => ./pkg/dothill-api-go

// replace github.com/kubernetes-csi/csi-lib-iscsi => ./pkg/csi-lib-iscsi
replace github.com/kubernetes-csi/csi-lib-iscsi => github.com/enix/csi-lib-iscsi v0.0.0-dothill-3-0-3
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/enix/csi-lib-iscsi v0.0.0-dothill-3-0-2-1 h1:W2US8dUbGdatD+Prb4gZTQFGSHTrqhcBzUtJAmVGlnI=
github.com/enix/csi-lib-iscsi v0.0.0-dothill-3-0-2-1/go.mod h1:c/keGS6bErOzLrFyNgafdDWT6h72v2XQiA/p2R7yghU=
github.com/enix/dothill-api-go v1.5.1 h1:54zjxnAqx2PfpfISJhMxsfTXO3N0V96hzP+ff13VN74=
github.com/enix/dothill-api-go v1.5.1/go.mod h1:tn6x7pK31Dr9749RwT0DHlH74fo8uQ/Y9Y1LnQmSugw=
github.com/enix/dothill-api-go v1.6.0 h1:lMF6SWwTyyFvGMktj698TQ3E1bGOBHkJbKu3t63AStU=
github.com/enix/dothill-api-go v1.6.0/go.mod h1:OuhSm5SRGxzXFy3kmRAGCCDpbp6q/2JFmTdES2jP5Jw=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
Expand Down
11 changes: 9 additions & 2 deletions pkg/common/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/container-storage-interface/spec/lib/go/csi"
"github.com/enix/dothill-csi/pkg/exporter"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
"github.com/prometheus/client_golang/prometheus"
"google.golang.org/grpc"
"k8s.io/klog"
)
Expand Down Expand Up @@ -58,8 +59,14 @@ type WithVolumeCaps interface {
}

// NewDriver is a convenience function for creating an abstract driver
func NewDriver() *Driver {
return &Driver{exporter: exporter.New(9842)}
func NewDriver(collectors ...prometheus.Collector) *Driver {
exporter := exporter.New(9842)

for _, collector := range collectors {
exporter.RegisterCollector(collector)
}

return &Driver{exporter: exporter}
}

func (driver *Driver) InitServer(unaryServerInterceptors ...grpc.UnaryServerInterceptor) {
Expand Down
5 changes: 3 additions & 2 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ type DriverCtx struct {

// New is a convenience fn for creating a controller driver
func New() *Controller {
dothillClient := dothill.NewClient()
controller := &Controller{
Driver: common.NewDriver(),
dothillClient: dothill.NewClient(),
Driver: common.NewDriver(dothillClient.Collector),
dothillClient: dothillClient,
}

controller.InitServer(
Expand Down
25 changes: 17 additions & 8 deletions pkg/exporter/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,18 @@ type Exporter struct {
Port int
Collector *Collector

listener net.Listener
server *http.Server
listener net.Listener
server *http.Server
collectors []prometheus.Collector
}

func New(port int) *Exporter {
return &Exporter{
exporter := &Exporter{
Port: port,
Collector: NewCollector(),
}
exporter.RegisterCollector(exporter.Collector)
return exporter
}

// ListenAndServe : Convenience function to start exporter
Expand All @@ -38,11 +41,13 @@ func (exporter *Exporter) ListenAndServe() error {

// Listen : Listen for requests
func (exporter *Exporter) Listen() error {
err := prometheus.Register(exporter.Collector)
if err != nil {
if registered, ok := err.(prometheus.AlreadyRegisteredError); ok {
prometheus.Unregister(registered.ExistingCollector)
prometheus.MustRegister(exporter.Collector)
for _, collector := range exporter.collectors {
err := prometheus.Register(collector)
if err != nil {
if registered, ok := err.(prometheus.AlreadyRegisteredError); ok {
prometheus.Unregister(registered.ExistingCollector)
prometheus.MustRegister(collector)
}
}
}

Expand Down Expand Up @@ -74,3 +79,7 @@ func (exporter *Exporter) Serve() error {
func (exporter *Exporter) Shutdown() error {
return exporter.server.Shutdown(context.Background())
}

func (exporter *Exporter) RegisterCollector(collector prometheus.Collector) {
exporter.collectors = append(exporter.collectors, collector)
}

0 comments on commit 31bf4c4

Please sign in to comment.