@@ -15,6 +15,7 @@ import (
1515
1616 "github.com/rhobs/obs-mcp/pkg/auth"
1717 "github.com/rhobs/obs-mcp/pkg/k8s"
18+ "github.com/rhobs/obs-mcp/pkg/logging"
1819 mcpserver "github.com/rhobs/obs-mcp/pkg/mcp"
1920 "github.com/rhobs/obs-mcp/pkg/otelcol"
2021 "github.com/rhobs/obs-mcp/pkg/prometheus"
@@ -68,6 +69,8 @@ func main() {
6869
6970 // Configure slog with specified log level
7071 configureLogging (* logLevel )
72+ ctx := logging .NewContext (context .Background (), slog .Default ())
73+ logger := logging .FromContext (ctx )
7174
7275 // Parse and validate auth mode
7376 parsedAuthMode , err := auth .ParseAuthMode (* authMode )
@@ -92,7 +95,7 @@ func main() {
9295 metricsBackendURL := ""
9396 metricsURLSource := ""
9497 if slices .Contains (parsedToolsets , mcpserver .ToolsetMetrics ) {
95- metricsBackendURL , metricsURLSource , err = determineMetricsBackendURL (parsedAuthMode , parsedMetricsBackend )
98+ metricsBackendURL , metricsURLSource , err = determineMetricsBackendURL (ctx , parsedAuthMode , parsedMetricsBackend )
9699 if err != nil {
97100 log .Fatalf ("%v" , err )
98101 }
@@ -101,7 +104,7 @@ func main() {
101104 alertmanagerURL := ""
102105 alertmanagerURLSource := ""
103106 if slices .Contains (parsedToolsets , mcpserver .ToolsetMetrics ) {
104- alertmanagerURL , alertmanagerURLSource , err = determineAlertmanagerURL (parsedAuthMode )
107+ alertmanagerURL , alertmanagerURLSource , err = determineAlertmanagerURL (ctx , parsedAuthMode )
105108 if err != nil {
106109 log .Fatalf ("%v" , err )
107110 }
@@ -111,7 +114,7 @@ func main() {
111114 lokiResolvedURL := ""
112115 lokiURLSource := ""
113116 if slices .Contains (parsedToolsets , mcpserver .ToolsetLogs ) {
114- lokiResolvedURL , lokiURLSource , err = determineLokiURL (parsedAuthMode , * lokiURL , * lokiUseRoute )
117+ lokiResolvedURL , lokiURLSource , err = determineLokiURL (ctx , parsedAuthMode , * lokiURL , * lokiUseRoute )
115118 if err != nil {
116119 log .Fatalf ("%v" , err )
117120 }
@@ -155,7 +158,7 @@ func main() {
155158 tempoResolvedURL := ""
156159 tempoURLSource := ""
157160 if slices .Contains (parsedToolsets , mcpserver .ToolsetTraces ) {
158- tempoResolvedURL , tempoURLSource = determineTempoURL (* tempoURL )
161+ tempoResolvedURL , tempoURLSource = determineTempoURL (ctx , * tempoURL )
159162 }
160163
161164 // Create MCP options
@@ -184,7 +187,7 @@ func main() {
184187 log .Fatalf ("Failed to create MCP server: %v" , err )
185188 }
186189
187- slog .Info ("Starting server" ,
190+ logger .Info ("Starting server" ,
188191 "toolsets" , opts .Toolsets ,
189192 "auth_mode" , opts .AuthMode ,
190193 "metrics_backend_url" , opts .MetricsBackendURL ,
@@ -201,14 +204,13 @@ func main() {
201204 // Choose server mode based on flags
202205 if * listen != "" {
203206 // HTTP mode
204- ctx := context .Background ()
205207 if err := mcpserver .Serve (ctx , mcpServer , * listen , opts .AuthMode ); err != nil {
206208 log .Fatalf ("HTTP server failed: %v" , err )
207209 }
208210 } else {
209211 // Start server on stdio (default mode)
210212 transport := & mcp.StdioTransport {}
211- if _ , err := mcpServer .Connect (context . Background () , transport , nil ); err != nil {
213+ if _ , err := mcpServer .Connect (ctx , transport , nil ); err != nil {
212214 log .Fatalf ("Server failed: %v" , err )
213215 }
214216 }
@@ -241,16 +243,17 @@ func parseMetricsBackend(backend string) (k8s.MetricsBackend, error) {
241243
242244// determineMetricsBackendURL determines the metrics backend URL based on auth mode and environment.
243245// Returns the resolved URL, a source description for logging, and an error if the configuration is invalid.
244- func determineMetricsBackendURL (authMode auth.AuthMode , backend k8s.MetricsBackend ) (url , source string , err error ) {
246+ func determineMetricsBackendURL (ctx context.Context , authMode auth.AuthMode , backend k8s.MetricsBackend ) (url , source string , err error ) {
247+ logger := logging .FromContext (ctx )
245248 if prometheusURL := os .Getenv ("PROMETHEUS_URL" ); prometheusURL != "" {
246249 return prometheusURL , "PROMETHEUS_URL env var" , nil
247250 }
248251
249252 if authMode == auth .AuthModeKubeConfig {
250- slog .Info ("No PROMETHEUS_URL set, attempting route discovery" , "backend" , backend )
251- url , err := k8s .GetMetricsBackendURL (backend )
253+ logger .Info ("No PROMETHEUS_URL set, attempting route discovery" , "backend" , string ( backend ) )
254+ url , err := k8s .GetMetricsBackendURL (ctx , backend )
252255 if err != nil {
253- slog .Warn ("Route discovery failed, falling back to default" , "err" , err , "default" , defaultPrometheusURL )
256+ logger .Warn ("Route discovery failed, falling back to default" , "err" , err , "default" , defaultPrometheusURL )
254257 return defaultPrometheusURL , "default (route discovery failed)" , nil
255258 }
256259 return url , "route discovery" , nil
@@ -267,16 +270,17 @@ func determineMetricsBackendURL(authMode auth.AuthMode, backend k8s.MetricsBacke
267270
268271// determineAlertmanagerURL determines the Alertmanager URL based on auth mode and environment.
269272// Returns the resolved URL, a source description for logging, and an error if the configuration is invalid.
270- func determineAlertmanagerURL (authMode auth.AuthMode ) (url , source string , err error ) {
273+ func determineAlertmanagerURL (ctx context.Context , authMode auth.AuthMode ) (url , source string , err error ) {
274+ logger := logging .FromContext (ctx )
271275 if alertmanagerURL := os .Getenv ("ALERTMANAGER_URL" ); alertmanagerURL != "" {
272276 return alertmanagerURL , "ALERTMANAGER_URL env var" , nil
273277 }
274278
275279 if authMode == auth .AuthModeKubeConfig {
276- slog .Info ("No ALERTMANAGER_URL set, attempting route discovery" )
277- url , err := k8s .GetAlertmanagerURL ()
280+ logger .Info ("No ALERTMANAGER_URL set, attempting route discovery" )
281+ url , err := k8s .GetAlertmanagerURL (ctx )
278282 if err != nil {
279- slog .Warn ("Route discovery failed, falling back to default" , "err" , err , "default" , defaultAlertmanagerURL )
283+ logger .Warn ("Route discovery failed, falling back to default" , "err" , err , "default" , defaultAlertmanagerURL )
280284 return defaultAlertmanagerURL , "default (route discovery failed)" , nil
281285 }
282286 return url , "route discovery" , nil
@@ -289,29 +293,31 @@ func determineAlertmanagerURL(authMode auth.AuthMode) (url, source string, err e
289293 )
290294}
291295
292- func determineTempoURL (flagURL string ) (url , source string ) {
296+ func determineTempoURL (ctx context.Context , flagURL string ) (url , source string ) {
297+ logger := logging .FromContext (ctx )
293298 if flagURL != "" {
294299 return flagURL , "--traces.tempo-url flag"
295300 }
296301 if tempoURL := os .Getenv ("TEMPO_URL" ); tempoURL != "" {
297302 return tempoURL , "TEMPO_URL env var"
298303 }
299- slog .Info ("No Tempo URL configured; Tempo tools require tempoNamespace+tempoName discovery parameters or explicit Tempo URL" )
304+ logger .Info ("No Tempo URL configured; Tempo tools require tempoNamespace+tempoName discovery parameters or explicit Tempo URL" )
300305 return "" , "unset"
301306}
302307
303- func determineLokiURL (authMode auth.AuthMode , flagURL string , useRoute bool ) (url , source string , err error ) {
308+ func determineLokiURL (ctx context.Context , authMode auth.AuthMode , flagURL string , useRoute bool ) (url , source string , err error ) {
309+ logger := logging .FromContext (ctx )
304310 if flagURL != "" {
305311 return flagURL , "--loki-url flag" , nil
306312 }
307313 if lokiURL := os .Getenv ("LOKI_URL" ); lokiURL != "" {
308314 return lokiURL , "LOKI_URL env var" , nil
309315 }
310316 if authMode == auth .AuthModeKubeConfig && ! useRoute {
311- slog .Warn ("No Loki URL configured, falling back to default" , "default" , defaultLokiURL )
317+ logger .Warn ("No Loki URL configured, falling back to default" , "default" , defaultLokiURL )
312318 return defaultLokiURL , "default" , nil
313319 }
314- slog .Warn ("No Loki URL configured; Loki tools require lokiNamespace+lokiName discovery parameters or explicit Loki URL" )
320+ logger .Warn ("No Loki URL configured; Loki tools require lokiNamespace+lokiName discovery parameters or explicit Loki URL" )
315321 return "" , "unset" , nil
316322}
317323
0 commit comments