Start starts the HTTP server.
()
| 449 | |
| 450 | // Start starts the HTTP server. |
| 451 | func (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) |
nothing calls this directly
no test coverage detected