@@ -23,16 +23,20 @@ import (
23
23
"crypto/x509"
24
24
"encoding/pem"
25
25
"fmt"
26
+ "time"
26
27
28
+ "github.com/cert-manager/cert-manager/pkg/server"
27
29
"github.com/cert-manager/csi-lib/driver"
28
30
"github.com/cert-manager/csi-lib/manager"
29
31
"github.com/cert-manager/csi-lib/manager/util"
30
32
"github.com/cert-manager/csi-lib/metadata"
31
33
"github.com/cert-manager/csi-lib/storage"
32
34
"github.com/spf13/cobra"
35
+ "golang.org/x/sync/errgroup"
33
36
"k8s.io/utils/clock"
34
37
35
38
"github.com/cert-manager/csi-driver/cmd/app/options"
39
+ "github.com/cert-manager/csi-driver/internal/metrics"
36
40
"github.com/cert-manager/csi-driver/internal/version"
37
41
csiapi "github.com/cert-manager/csi-driver/pkg/apis/v1alpha1"
38
42
"github.com/cert-manager/csi-driver/pkg/filestore"
@@ -96,18 +100,46 @@ func NewCommand(ctx context.Context) *cobra.Command {
96
100
return fmt .Errorf ("failed to setup driver: " + err .Error ())
97
101
}
98
102
99
- go func () {
103
+ const metricsListenAddress = ":8080"
104
+ // Start metrics server
105
+ metricsLn , err := server .Listen ("tcp" , metricsListenAddress )
106
+ if err != nil {
107
+ return fmt .Errorf ("failed to listen on prometheus address %s: %v" , metricsListenAddress , err )
108
+ }
109
+ metricsServer := metrics .NewServer (metricsLn )
110
+
111
+ g , _ := errgroup .WithContext (ctx )
112
+ g .Go (func () error {
100
113
<- ctx .Done ()
101
114
log .Info ("shutting down driver" , "context" , ctx .Err ())
102
115
d .Stop ()
103
- }()
116
+ return nil
117
+ })
104
118
105
- log .Info ("running driver" )
106
- if err := d .Run (); err != nil {
107
- return fmt .Errorf ("failed running driver: " + err .Error ())
108
- }
119
+ g .Go (func () error {
120
+ log .Info ("running driver" )
121
+ if err := d .Run (); err != nil {
122
+ return fmt .Errorf ("failed running driver: " + err .Error ())
123
+ }
124
+ return nil
125
+ })
126
+
127
+ g .Go (func () error {
128
+ <- ctx .Done ()
129
+ // allow a timeout for graceful shutdown
130
+ shutdownCtx , cancel := context .WithTimeout (context .Background (), 5 * time .Second )
131
+ defer cancel ()
132
+
133
+ // nolint: contextcheck
134
+ return metricsServer .Shutdown (shutdownCtx )
135
+ })
136
+
137
+ g .Go (func () error {
138
+ log .V (3 ).Info ("starting metrics server" , "address" , metricsLn .Addr ())
139
+ return metricsServer .Serve (metricsLn )
140
+ })
109
141
110
- return nil
142
+ return g . Wait ()
111
143
},
112
144
}
113
145
0 commit comments