diff --git a/app/app.go b/app/app.go index ceccbb36..03d5582d 100644 --- a/app/app.go +++ b/app/app.go @@ -1,9 +1,9 @@ +// Package app is the entry point of the application. package app import ( "fmt" "net/http" - "time" "github.com/gulien/gotenberg/app/config" "github.com/gulien/gotenberg/app/handlers" @@ -13,12 +13,19 @@ import ( "github.com/gorilla/mux" ) +// App gathers all data required to start the application. type App struct { + // version is the application version as defined in the main package. version string - config *config.AppConfig - Server *http.Server + // config is the application configuration. + // It's populated thanks to the gotenberg.yml file. + config *config.AppConfig + // Server is the instance of http.Server used by the application. + Server *http.Server } +// NewApp instantiates the application by loading the configuration from the +// gotenberg.yml file. func NewApp(version string) (*App, error) { c, err := config.NewAppConfig() if err != nil { @@ -38,17 +45,14 @@ func NewApp(version string) (*App, error) { r.Handle("/", handlers.GetHandlersChain()) a.Server = &http.Server{ - Addr: fmt.Sprintf(":%s", a.config.Port), - // good practice to set timeouts to avoid Slowloris attacks. - WriteTimeout: time.Second * 15, - ReadTimeout: time.Second * 15, - IdleTimeout: time.Second * 60, - Handler: r, + Addr: fmt.Sprintf(":%s", a.config.Port), + Handler: r, } return a, nil } +// Run starts the server. func (a *App) Run() error { process.Load(a.config.CommandsConfig) logger.Infof("Starting Gotenberg version %s", a.version) diff --git a/gotenberg.yml b/gotenberg.yml index 6a45e358..084ca535 100644 --- a/gotenberg.yml +++ b/gotenberg.yml @@ -13,13 +13,13 @@ logs: commands: html: - timeout: 10 + timeout: 30 template: "xvfb-run -e /dev/stdout wkhtmltopdf {{ .FilePath }} {{ .ResultFilePath }}" office: - timeout: 10 + timeout: 30 template: "unoconv --format pdf --output \"{{ .ResultFilePath }}\" \"{{ .FilePath }}\"" merge: - timeout: 10 + timeout: 30 template: "pdftk {{ range $filePath := .FilesPaths }} {{ $filePath }} {{ end }} cat output {{ .ResultFilePath }}" diff --git a/main.go b/main.go index c312e91a..71718f03 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,7 @@ /* Package main handles the application startup and shutdown. -Gotenberg is a stateless API for generating PDF from many sources -(".html", ".doc", ".docx"). +Gotenberg is a stateless API for converting HTML files and Office document to PDF. For more information, go to https://github.com/gulien/gotenberg. */ @@ -23,7 +22,7 @@ import ( // version will be set on build time. var version = "master" -// main initializes the application and handles +// main initializes the application, starts it, and handles // graceful shutdown. func main() { a, err := app.NewApp(version)