Files
gotenberg/internal/pkg/pm2/chrome.go
Thomas Bøgh Fangel 6fa48c9222 Apply suggestions from code review
Co-Authored-By: Julien Neuhart <j.neuhart@thecodingmachine.com>
2019-06-17 11:29:52 +02:00

85 lines
1.8 KiB
Go

package pm2
import (
"context"
"time"
"github.com/mafredri/cdp/devtool"
)
const (
warmupTime = 10 * time.Second
)
type chrome struct {
manager *processManager
}
// NewChrome retruns a Google Chrome
// headless process.
func NewChrome(debug bool) Process {
return &chrome{
manager: &processManager{verbose: debug},
}
}
func (p *chrome) Fullname() string {
return "Google Chrome headless"
}
func (p *chrome) Start() error {
return p.manager.start(p)
}
func (p *chrome) Shutdown() error {
return p.manager.shutdown(p)
}
func (p *chrome) args() []string {
return []string{
"--no-sandbox",
"--headless",
"--remote-debugging-port=9222",
"--disable-gpu",
"--disable-translate",
"--disable-extensions",
"--disable-background-networking",
"--safebrowsing-disable-auto-update",
"--disable-sync",
"--disable-default-apps",
"--hide-scrollbars",
"--metrics-recording-only",
"--mute-audio",
"--no-first-run",
}
}
func (p *chrome) name() string {
return "google-chrome-stable"
}
func (p *chrome) viable() bool {
// check if Google Chrome is correctly running.
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
p.manager.notifyf(`%v: checking Chrome liveness via debug version endpoint
'http://localhost:9222/json/version'`, p.name())
v, err := devtool.New("http://localhost:9222").Version(ctx)
if err != nil {
p.manager.notifyf("%s: %s version endpoint returned error: %v", p.name(), p.Fullname(), err)
return false
}
p.manager.notifyf("%s: %s returned version info: %+v", p.name(), p.Fullname(), *v)
return true
}
func (p *chrome) warmup() {
p.manager.notifyf("%s: allowing %s %v to startup", p.name(), p.Fullname(), warmupTime)
time.Sleep(warmupTime)
}
// Compile-time checks to ensure type implements desired interfaces.
var (
_ = Process(new(chrome))
)