MCPcopy Create free account
hub / github.com/gotenberg/gotenberg / telemetryMiddleware

Function telemetryMiddleware

pkg/modules/api/middlewares.go:169–317  ·  view source on GitHub ↗

telemetryMiddleware manages telemetry. It sets the correlation ID in the [echo.Context] under "correlationId". correlationIdHeader := c.Get("correlationIdHeader").(string) correlationId := c.Get("correlationId").(string)

(logger *slog.Logger, serverName, correlationIdHeader string, disableTelemetryForPaths []string)

Source from the content-addressed store, hash-verified

167// correlationIdHeader := c.Get("correlationIdHeader").(string)
168// correlationId := c.Get("correlationId").(string)
169func telemetryMiddleware(logger *slog.Logger, serverName, correlationIdHeader string, disableTelemetryForPaths []string) echo.MiddlewareFunc {
170 meter := gotenberg.Meter()
171 semconvSrv := semconvutil.NewHTTPServer(meter)
172
173 return func(next echo.HandlerFunc) echo.HandlerFunc {
174 return func(c echo.Context) error {
175 startTime := c.Get("startTime").(time.Time)
176 rootPath := c.Get("rootPath").(string)
177
178 request := c.Request()
179 savedCtx := request.Context()
180 defer func() {
181 request = request.WithContext(savedCtx)
182 c.SetRequest(request)
183 }()
184
185 routePath := func() string {
186 path := c.Request().URL.Path
187
188 if path == "" {
189 path = "/"
190 }
191
192 return path
193 }()
194
195 // Evaluate if we should skip telemetry for this path.
196 skipTelemetry := false
197 for _, path := range disableTelemetryForPaths {
198 URI := fmt.Sprintf("%s%s", rootPath, path)
199 if c.Request().RequestURI == URI {
200 skipTelemetry = true
201 break
202 }
203 }
204
205 if skipTelemetry {
206 c.Set("logger", slog.New(slog.DiscardHandler))
207
208 err := next(c)
209 if err != nil {
210 c.Error(err)
211 }
212 return nil
213 }
214
215 correlationId := request.Header.Get(correlationIdHeader)
216 if correlationId == "" {
217 correlationId = uuid.NewString()
218 }
219 c.Set("correlationIdHeader", correlationIdHeader)
220 c.Set("correlationId", correlationId)
221
222 ctx := otel.GetTextMapPropagator().Extract(savedCtx, propagation.HeaderCarrier(request.Header))
223
224 rAttr := semconvSrv.Route(routePath)
225 opts := []trace.SpanStartOption{
226 trace.WithAttributes(

Callers 1

StartMethod · 0.85

Calls 15

RouteMethod · 0.95
RequestTraceAttrsMethod · 0.95
StatusMethod · 0.95
ResponseTraceAttrsMethod · 0.95
RecordMetricsMethod · 0.95
MeterFunction · 0.92
TracerFunction · 0.92
ParseErrorFunction · 0.85
GetMethod · 0.80
RequestMethod · 0.80
WithContextMethod · 0.80
SetMethod · 0.80

Tested by

no test coverage detected