Skip to content

Commit 457f64d

Browse files
committed
address feedback
1 parent c0a68f5 commit 457f64d

File tree

5 files changed

+34
-11
lines changed

5 files changed

+34
-11
lines changed

internal/ghmcp/server.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"github.com/github/github-mcp-server/pkg/lockdown"
2020
mcplog "github.com/github/github-mcp-server/pkg/log"
2121
"github.com/github/github-mcp-server/pkg/observability"
22+
"github.com/github/github-mcp-server/pkg/observability/metrics"
2223
"github.com/github/github-mcp-server/pkg/raw"
2324
"github.com/github/github-mcp-server/pkg/scopes"
2425
"github.com/github/github-mcp-server/pkg/translations"
@@ -117,6 +118,10 @@ func NewStdioMCPServer(ctx context.Context, cfg github.MCPServerConfig) (*mcp.Se
117118
featureChecker := createFeatureChecker(cfg.EnabledFeatures)
118119

119120
// Create dependencies for tool handlers
121+
obs, err := observability.NewExporters(cfg.Logger, metrics.NewNoopMetrics())
122+
if err != nil {
123+
return nil, fmt.Errorf("failed to create observability exporters: %w", err)
124+
}
120125
deps := github.NewBaseDeps(
121126
clients.rest,
122127
clients.gql,
@@ -129,7 +134,7 @@ func NewStdioMCPServer(ctx context.Context, cfg github.MCPServerConfig) (*mcp.Se
129134
},
130135
cfg.ContentWindowSize,
131136
featureChecker,
132-
observability.NewExporters(cfg.Logger, nil),
137+
obs,
133138
)
134139
// Build and register the tool/resource/prompt inventory
135140
inventoryBuilder := github.NewInventory(cfg.Translator).

pkg/github/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (s stubDeps) Logger(_ context.Context) *slog.Logger {
6868
if s.obsv != nil {
6969
return s.obsv.Logger()
7070
}
71-
return nil
71+
return slog.New(slog.DiscardHandler)
7272
}
7373
func (s stubDeps) Metrics(ctx context.Context) metrics.Metrics {
7474
if s.obsv != nil {

pkg/http/server.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ func RunHTTPServer(cfg ServerConfig) error {
107107

108108
featureChecker := createHTTPFeatureChecker()
109109

110+
obs, err := observability.NewExporters(logger, nil)
111+
if err != nil {
112+
return fmt.Errorf("failed to create observability exporters: %w", err)
113+
}
114+
110115
deps := github.NewRequestDeps(
111116
apiHost,
112117
cfg.Version,
@@ -115,7 +120,7 @@ func RunHTTPServer(cfg ServerConfig) error {
115120
t,
116121
cfg.ContentWindowSize,
117122
featureChecker,
118-
observability.NewExporters(logger, nil),
123+
obs,
119124
)
120125

121126
// Initialize the global tool scope map

pkg/observability/observability.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package observability
22

33
import (
44
"context"
5+
"errors"
56
"log/slog"
67

78
"github.com/github/github-mcp-server/pkg/observability/metrics"
@@ -21,11 +22,15 @@ type exporters struct {
2122

2223
// NewExporters creates an Exporters bundle. Pass a configured *slog.Logger
2324
// (with whatever slog.Handler you need) and a Metrics implementation.
24-
func NewExporters(logger *slog.Logger, metrics metrics.Metrics) Exporters {
25+
// The logger must not be nil; use slog.New(slog.DiscardHandler) if logging is unwanted.
26+
func NewExporters(logger *slog.Logger, metrics metrics.Metrics) (Exporters, error) {
27+
if logger == nil {
28+
return nil, errors.New("logger must not be nil: use slog.New(slog.DiscardHandler) to discard logs")
29+
}
2530
return &exporters{
2631
logger: logger,
2732
metrics: metrics,
28-
}
33+
}, nil
2934
}
3035

3136
func (e *exporters) Logger() *slog.Logger {

pkg/observability/observability_test.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,32 @@ import (
77

88
"github.com/github/github-mcp-server/pkg/observability/metrics"
99
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
1011
)
1112

1213
func TestNewExporters(t *testing.T) {
1314
logger := slog.Default()
1415
m := metrics.NewNoopMetrics()
15-
exp := NewExporters(logger, m)
16+
exp, err := NewExporters(logger, m)
1617
ctx := context.Background()
1718

19+
require.NoError(t, err)
1820
assert.NotNil(t, exp)
1921
assert.Equal(t, logger, exp.Logger())
2022
assert.Equal(t, m, exp.Metrics(ctx))
2123
}
2224

23-
func TestExporters_WithNilLogger(t *testing.T) {
24-
exp := NewExporters(nil, nil)
25-
ctx := context.Background()
25+
func TestNewExporters_WithNilLogger(t *testing.T) {
26+
_, err := NewExporters(nil, nil)
27+
require.Error(t, err)
28+
assert.Contains(t, err.Error(), "logger must not be nil")
29+
}
2630

31+
func TestNewExporters_WithDiscardLogger(t *testing.T) {
32+
logger := slog.New(slog.DiscardHandler)
33+
exp, err := NewExporters(logger, nil)
34+
35+
require.NoError(t, err)
2736
assert.NotNil(t, exp)
28-
assert.Nil(t, exp.Logger())
29-
assert.Nil(t, exp.Metrics(ctx))
37+
assert.Equal(t, logger, exp.Logger())
3038
}

0 commit comments

Comments
 (0)