Skip to content

Commit 30e09c2

Browse files
committed
fix lint
Signed-off-by: Jeremy Drouillard <jeremy@stacklok.com>
1 parent c22d878 commit 30e09c2

File tree

4 files changed

+44
-11
lines changed

4 files changed

+44
-11
lines changed

cmd/thv-operator/api/v1alpha1/virtualmcpserver_types.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package v1alpha1
22

33
import (
4-
"github.com/stacklok/toolhive/pkg/telemetry"
54
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
65
"k8s.io/apimachinery/pkg/runtime"
6+
7+
"github.com/stacklok/toolhive/pkg/telemetry"
78
)
89

910
// VirtualMCPServerSpec defines the desired state of VirtualMCPServer

pkg/vmcp/server/server.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,13 @@ func New(
204204
// backend calls are instrumented when they occur during workflow execution.
205205
if cfg.TelemetryProvider != nil {
206206
var err error
207-
backendClient, err = monitorBackends(context.Background(), cfg.TelemetryProvider.MeterProvider(), cfg.TelemetryProvider.TracerProvider(), backends, backendClient)
207+
backendClient, err = monitorBackends(
208+
context.Background(),
209+
cfg.TelemetryProvider.MeterProvider(),
210+
cfg.TelemetryProvider.TracerProvider(),
211+
backends,
212+
backendClient,
213+
)
208214
if err != nil {
209215
return nil, fmt.Errorf("failed to monitor backends: %w", err)
210216
}
@@ -224,7 +230,11 @@ func New(
224230

225231
// Decorate workflow executors with telemetry if provider is configured
226232
if cfg.TelemetryProvider != nil {
227-
workflowExecutors, err = monitorWorkflowExecutors(cfg.TelemetryProvider.MeterProvider(), cfg.TelemetryProvider.TracerProvider(), workflowExecutors)
233+
workflowExecutors, err = monitorWorkflowExecutors(
234+
cfg.TelemetryProvider.MeterProvider(),
235+
cfg.TelemetryProvider.TracerProvider(),
236+
workflowExecutors,
237+
)
228238
if err != nil {
229239
return nil, fmt.Errorf("failed to monitor workflow executors: %w", err)
230240
}

pkg/vmcp/server/telemetry.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,24 @@ func monitorBackends(
3838
}
3939
backendCount.Record(ctx, int64(len(backends)))
4040

41-
requestsTotal, err := meter.Int64Counter("toolhive_vmcp_backend_requests_total", metric.WithDescription("Total number of requests per backend"))
41+
requestsTotal, err := meter.Int64Counter(
42+
"toolhive_vmcp_backend_requests_total",
43+
metric.WithDescription("Total number of requests per backend"),
44+
)
4245
if err != nil {
4346
return nil, fmt.Errorf("failed to create requests total counter: %w", err)
4447
}
45-
errorsTotal, err := meter.Int64Counter("toolhive_vmcp_backend_errors_total", metric.WithDescription("Total number of errors per backend"))
48+
errorsTotal, err := meter.Int64Counter(
49+
"toolhive_vmcp_backend_errors_total",
50+
metric.WithDescription("Total number of errors per backend"),
51+
)
4652
if err != nil {
4753
return nil, fmt.Errorf("failed to create errors total counter: %w", err)
4854
}
49-
requestsDuration, err := meter.Float64Histogram("toolhive_vmcp_backend_requests_duration", metric.WithDescription("Duration of requests in seconds per backend"))
55+
requestsDuration, err := meter.Float64Histogram(
56+
"toolhive_vmcp_backend_requests_duration",
57+
metric.WithDescription("Duration of requests in seconds per backend"),
58+
)
5059
if err != nil {
5160
return nil, fmt.Errorf("failed to create requests duration histogram: %w", err)
5261
}
@@ -73,7 +82,9 @@ var _ vmcp.BackendClient = telemetryBackendClient{}
7382

7483
// record updates the metrics and creates a span for each method on the BackendClient interface.
7584
// It returns a function that should be deferred to record the duration, error, and end the span.
76-
func (t telemetryBackendClient) record(ctx context.Context, target *vmcp.BackendTarget, action string, err *error) (context.Context, func()) {
85+
func (t telemetryBackendClient) record(
86+
ctx context.Context, target *vmcp.BackendTarget, action string, err *error,
87+
) (context.Context, func()) {
7788
// Create span attributes
7889
commonAttrs := []attribute.KeyValue{
7990
attribute.String("target.workload_id", target.WorkloadID),
@@ -104,25 +115,33 @@ func (t telemetryBackendClient) record(ctx context.Context, target *vmcp.Backend
104115
}
105116
}
106117

107-
func (t telemetryBackendClient) CallTool(ctx context.Context, target *vmcp.BackendTarget, toolName string, arguments map[string]any) (_ map[string]any, retErr error) {
118+
func (t telemetryBackendClient) CallTool(
119+
ctx context.Context, target *vmcp.BackendTarget, toolName string, arguments map[string]any,
120+
) (_ map[string]any, retErr error) {
108121
ctx, done := t.record(ctx, target, "call_tool", &retErr)
109122
defer done()
110123
return t.backendClient.CallTool(ctx, target, toolName, arguments)
111124
}
112125

113-
func (t telemetryBackendClient) ReadResource(ctx context.Context, target *vmcp.BackendTarget, uri string) (_ []byte, retErr error) {
126+
func (t telemetryBackendClient) ReadResource(
127+
ctx context.Context, target *vmcp.BackendTarget, uri string,
128+
) (_ []byte, retErr error) {
114129
ctx, done := t.record(ctx, target, "read_resource", &retErr)
115130
defer done()
116131
return t.backendClient.ReadResource(ctx, target, uri)
117132
}
118133

119-
func (t telemetryBackendClient) GetPrompt(ctx context.Context, target *vmcp.BackendTarget, name string, arguments map[string]any) (_ string, retErr error) {
134+
func (t telemetryBackendClient) GetPrompt(
135+
ctx context.Context, target *vmcp.BackendTarget, name string, arguments map[string]any,
136+
) (_ string, retErr error) {
120137
ctx, done := t.record(ctx, target, "get_prompt", &retErr)
121138
defer done()
122139
return t.backendClient.GetPrompt(ctx, target, name, arguments)
123140
}
124141

125-
func (t telemetryBackendClient) ListCapabilities(ctx context.Context, target *vmcp.BackendTarget) (_ *vmcp.CapabilityList, retErr error) {
142+
func (t telemetryBackendClient) ListCapabilities(
143+
ctx context.Context, target *vmcp.BackendTarget,
144+
) (_ *vmcp.CapabilityList, retErr error) {
126145
ctx, done := t.record(ctx, target, "list_capabilities", &retErr)
127146
defer done()
128147
return t.backendClient.ListCapabilities(ctx, target)

test/integration/vmcp/vmcp_integration_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,10 @@ func TestVMCPServer_TwoBoundaryAuth_HeaderInjection(t *testing.T) {
237237
// Prometheus metrics for composite tool workflow executions and backend requests on /metrics.
238238
// This test creates a composite tool, executes it, and verifies the metrics
239239
// for both the workflow and the backend subtool calls are correctly exposed.
240+
//
241+
//nolint:paralleltest // safe to run in parallel with other tests
240242
func TestVMCPServer_Telemetry_CompositeToolMetrics(t *testing.T) {
243+
t.Parallel()
241244

242245
ctx, cancel := context.WithCancel(context.Background())
243246
defer cancel()

0 commit comments

Comments
 (0)