@@ -25,6 +25,7 @@ import (
2525 "time"
2626
2727 "github.com/getsentry/sentry-go"
28+ sentryhttpclient "github.com/getsentry/sentry-go/httpclient"
2829
2930 // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
3031 // to ensure that exec-entrypoint and run can make use of them.
@@ -33,6 +34,7 @@ import (
3334 "k8s.io/apimachinery/pkg/runtime"
3435 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3536 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
37+ "k8s.io/client-go/rest"
3638 ctrl "sigs.k8s.io/controller-runtime"
3739 "sigs.k8s.io/controller-runtime/pkg/cache"
3840 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -68,6 +70,7 @@ func main() {
6870 var sentryDsn string
6971 var sentryEnvironment string
7072 var sentryTracesSampleRate float64
73+ var sentryRelease string
7174 var secureMetrics bool
7275 var enableHTTP2 bool
7376 var tlsOpts []func (* tls.Config )
@@ -89,6 +92,7 @@ func main() {
8992 0 ,
9093 "The sample rate for Sentry performance monitoring." ,
9194 )
95+ flag .StringVar (& sentryRelease , "sentry-release" , "" , "The release value used for Sentry." )
9296 opts := zap.Options {
9397 Development : true ,
9498 }
@@ -103,18 +107,29 @@ func main() {
103107 setupLog .Info ("Sentry config" ,
104108 "DSN" , sentryDsn ,
105109 "environment" , sentryEnvironment ,
110+ "release" , sentryRelease ,
106111 "tracesSampleRate" , sentryTracesSampleRate ,
107112 )
108113 err := sentry .Init (sentry.ClientOptions {
109114 Dsn : sentryDsn ,
110115 SendDefaultPII : false ,
116+ Environment : sentryEnvironment ,
117+ Release : sentryRelease ,
111118 EnableTracing : sentryTracesSampleRate > 0 ,
112119 TracesSampleRate : sentryTracesSampleRate ,
113120 })
114121 if err != nil {
115122 setupLog .Error (err , "failed to initialize Sentry" )
116123 os .Exit (1 )
117124 }
125+ defer func () {
126+ err := recover ()
127+ if err != nil {
128+ sentry .CurrentHub ().Recover (err )
129+ sentry .Flush (2 * time .Second )
130+ panic (err )
131+ }
132+ }()
118133 defer sentry .Flush (2 * time .Second )
119134 }
120135
@@ -166,17 +181,24 @@ func main() {
166181 if releaseNamespace == "" {
167182 releaseNamespace = "default"
168183 }
184+
185+ config := ctrl .GetConfigOrDie ()
186+
187+ httpClient , err := rest .HTTPClientFor (config )
188+ if err != nil {
189+ setupLog .Error (err , "unable to get http client for config" )
190+ os .Exit (1 )
191+ }
192+ httpClient .Transport = sentryhttpclient .NewSentryRoundTripper (httpClient .Transport )
193+
169194 cacheOptions := cache.Options {
195+ HTTPClient : httpClient ,
170196 DefaultNamespaces : map [string ]cache.Config {releaseNamespace : {}},
171197 }
172198 if clusterScoped {
173- cacheOptions = cache.Options {
174- DefaultNamespaces : nil ,
175- }
199+ cacheOptions .DefaultNamespaces = nil
176200 }
177201
178- config := ctrl .GetConfigOrDie ()
179-
180202 mgr , err := ctrl .NewManager (config , ctrl.Options {
181203 Scheme : scheme ,
182204 Metrics : metricsServerOptions ,
@@ -196,6 +218,9 @@ func main() {
196218 // after the manager stops then its usage might be unsafe.
197219 // LeaderElectionReleaseOnCancel: true,
198220 Cache : cacheOptions ,
221+ Client : client.Options {
222+ HTTPClient : httpClient ,
223+ },
199224 })
200225 if err != nil {
201226 setupLog .Error (err , "unable to start manager" )
0 commit comments