home: imp code

This commit is contained in:
Stanislav Chzhen 2024-12-03 19:01:55 +03:00
parent 5368d8de50
commit 035477513f
3 changed files with 37 additions and 28 deletions

View File

@ -243,27 +243,18 @@ func checkDNSStubListener(ctx context.Context, l *slog.Logger) (ok bool) {
return false
}
var cmd *exec.Cmd
var err error
defer func() {
if ok {
return
}
l.ErrorContext(
cmd := exec.Command("systemctl", "is-enabled", "systemd-resolved")
l.DebugContext(ctx, "executing", "cmd", cmd.Path, "args", cmd.Args)
_, err := cmd.Output()
if err != nil || cmd.ProcessState.ExitCode() != 0 {
l.InfoContext(
ctx,
"execution failed",
"cmd", cmd.Path,
"code", cmd.ProcessState.ExitCode(),
slogutil.KeyError, err,
)
}()
cmd = exec.Command("systemctl", "is-enabled", "systemd-resolved")
l.DebugContext(ctx, "executing", "cmd", cmd.Path, "args", cmd.Args)
_, err = cmd.Output()
if err != nil || cmd.ProcessState.ExitCode() != 0 {
return false
}
@ -271,6 +262,14 @@ func checkDNSStubListener(ctx context.Context, l *slog.Logger) (ok bool) {
l.DebugContext(ctx, "executing", "cmd", cmd.Path, "args", cmd.Args)
_, err = cmd.Output()
if err != nil || cmd.ProcessState.ExitCode() != 0 {
l.InfoContext(
ctx,
"execution failed",
"cmd", cmd.Path,
"code", cmd.ProcessState.ExitCode(),
slogutil.KeyError, err,
)
return false
}

View File

@ -531,9 +531,11 @@ func initWeb(
baseLogger *slog.Logger,
customURL bool,
) (web *webAPI, err error) {
logger := baseLogger.With(slogutil.KeyPrefix, "webapi")
var clientFS fs.FS
if opts.localFrontend {
log.Info("warning: using local frontend files")
logger.WarnContext(ctx, "using local frontend files")
clientFS = os.DirFS("build/static")
} else {
@ -546,7 +548,9 @@ func initWeb(
disableUpdate := !isUpdateEnabled(ctx, baseLogger, &opts, customURL)
webConf := &webConfig{
updater: upd,
updater: upd,
logger: logger,
baseLogger: baseLogger,
clientFS: clientFS,
@ -562,7 +566,7 @@ func initWeb(
serveHTTP3: config.DNS.ServeHTTP3,
}
web = newWebAPI(ctx, webConf, baseLogger)
web = newWebAPI(ctx, webConf)
if web == nil {
return nil, errors.Error("can not initialize web")
}

View File

@ -41,6 +41,13 @@ const (
type webConfig struct {
updater *updater.Updater
// logger is a slog logger used in webAPI. It must not be nil.
logger *slog.Logger
// baseLogger is used to create loggers for other entities. It must not be
// nil.
baseLogger *slog.Logger
clientFS fs.FS
// BindAddr is the binding address with port for plain HTTP web interface.
@ -109,14 +116,13 @@ type webAPI struct {
// must not be nil.
//
// TODO(a.garipov): Return a proper error.
func newWebAPI(ctx context.Context, conf *webConfig, baseLogger *slog.Logger) (w *webAPI) {
logger := baseLogger.With(slogutil.KeyPrefix, "webapi")
logger.InfoContext(ctx, "initializing")
func newWebAPI(ctx context.Context, conf *webConfig) (w *webAPI) {
conf.logger.InfoContext(ctx, "initializing")
w = &webAPI{
conf: conf,
logger: logger,
baseLogger: baseLogger,
logger: conf.logger,
baseLogger: conf.baseLogger,
}
clientFS := http.FileServer(http.FS(conf.clientFS))
@ -126,7 +132,7 @@ func newWebAPI(ctx context.Context, conf *webConfig, baseLogger *slog.Logger) (w
// add handlers for /install paths, we only need them when we're not configured yet
if conf.firstRun {
logger.InfoContext(
conf.logger.InfoContext(
ctx,
"This is the first launch of AdGuard Home, redirecting everything to /install.html",
)
@ -204,10 +210,10 @@ const loggerKeyServer = "server"
// start - start serving HTTP requests
func (web *webAPI) start(ctx context.Context) {
web.logger.InfoContext(ctx, "AdGuard Home is available at the following addresses:")
defer slogutil.RecoverAndLog(ctx, web.logger)
web.logger.InfoContext(ctx, "AdGuard Home is available at the following addresses:")
// for https, we have a separate goroutine loop
go web.tlsServerLoop(ctx)
@ -358,10 +364,10 @@ func startPprof(baseLogger *slog.Logger, port uint16) {
mux := http.NewServeMux()
httputil.RoutePprof(mux)
go func() {
ctx := context.Background()
logger := baseLogger.With(slogutil.KeyPrefix, "pprof")
ctx := context.Background()
logger := baseLogger.With(slogutil.KeyPrefix, "pprof")
go func() {
defer slogutil.RecoverAndLog(ctx, logger)
logger.InfoContext(ctx, "listening", "addr", addr)