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

Method Start

pkg/modules/api/api.go:451–636  ·  view source on GitHub ↗

Start starts the HTTP server.

()

Source from the content-addressed store, hash-verified

449
450// Start starts the HTTP server.
451func (a *Api) Start() error {
452 a.srv = echo.New()
453 a.srv.HideBanner = true
454 a.srv.HidePort = true
455 a.srv.Server.ReadTimeout = a.timeout
456 a.srv.Server.IdleTimeout = a.timeout
457 // See https://github.com/gotenberg/gotenberg/issues/396.
458 a.srv.Server.WriteTimeout = a.timeout + a.timeout
459 a.srv.HTTPErrorHandler = httpErrorHandler()
460
461 // Let's prepare the modules' routes.
462 var disableTelemetryForPaths []string
463 for i, route := range a.routes {
464 a.routes[i].Path = strings.TrimPrefix(route.Path, "/")
465
466 if route.DisableTelemetry {
467 disableTelemetryForPaths = append(disableTelemetryForPaths, strings.TrimPrefix(route.Path, "/"))
468 }
469 }
470
471 // Check if the user wishes to disable telemetry for specific routes.
472 if a.disableHealthCheckRouteTelemetry {
473 disableTelemetryForPaths = append(disableTelemetryForPaths, "health")
474 }
475 if a.disableRootRouteTelemetry {
476 disableTelemetryForPaths = append(disableTelemetryForPaths, "")
477 }
478 if a.disableDebugRouteTelemetry {
479 disableTelemetryForPaths = append(disableTelemetryForPaths, "debug")
480 }
481 if a.disableVersionRouteTelemetry {
482 disableTelemetryForPaths = append(disableTelemetryForPaths, "version")
483 }
484
485 serverName := fmt.Sprintf("%s:%d", a.bindIp, a.port)
486
487 // Add the API middlewares.
488 a.srv.Pre(
489 latencyMiddleware(),
490 rootPathMiddleware(a.rootPath),
491 outputFilenameMiddleware(),
492 telemetryMiddleware(a.logger, serverName, a.correlationIdHeader, disableTelemetryForPaths),
493 )
494
495 // Add the modules' middlewares in their respective stacks.
496 var externalMultipartMiddlewares []Middleware
497 for _, externalMiddleware := range a.externalMiddlewares {
498 switch externalMiddleware.Stack {
499 case PreRouterStack:
500 a.srv.Pre(externalMiddleware.Handler)
501 case MultipartStack:
502 externalMultipartMiddlewares = append(externalMultipartMiddlewares, externalMiddleware)
503 case DefaultStack:
504 a.srv.Use(externalMiddleware.Handler)
505 }
506 }
507
508 hardTimeout := a.timeout + (time.Duration(5) * time.Second)

Callers

nothing calls this directly

Calls 15

DebugFunction · 0.92
httpErrorHandlerFunction · 0.85
latencyMiddlewareFunction · 0.85
rootPathMiddlewareFunction · 0.85
outputFilenameMiddlewareFunction · 0.85
telemetryMiddlewareFunction · 0.85
basicAuthMiddlewareFunction · 0.85
contextMiddlewareFunction · 0.85
hardTimeoutMiddlewareFunction · 0.85
DurationMethod · 0.80
AddMethod · 0.80
StringMethod · 0.80

Tested by

no test coverage detected