diff options
| author | Shulhan <ms@kilabit.info> | 2026-02-11 22:26:51 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2026-02-11 22:26:51 +0700 |
| commit | aa33fe5d71eda1ccdf38e29f5ea96c2ef4a844a6 (patch) | |
| tree | 2f6121fda6c953febf8824bba7158d88b4a91945 /cmd | |
| parent | 5b41090e6c523a1e66047329e51c2b0db280a581 (diff) | |
| download | pakakeh.go-aa33fe5d71eda1ccdf38e29f5ea96c2ef4a844a6.tar.xz | |
cmd/httpdfs: add option to set base path and shutdown idle duration
The `-base-path` option set the URL prefix for serving HTTP request.
The `-shutdown-idle` option set the duration when server will stop
accepting new connections and shutting down.
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/httpdfs/main.go | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/cmd/httpdfs/main.go b/cmd/httpdfs/main.go index 857160d8..8ea5c0ab 100644 --- a/cmd/httpdfs/main.go +++ b/cmd/httpdfs/main.go @@ -12,6 +12,7 @@ import ( "os" "os/signal" "syscall" + "time" pakakeh "git.sr.ht/~shulhan/pakakeh.go" libhttp "git.sr.ht/~shulhan/pakakeh.go/lib/http" @@ -24,16 +25,26 @@ const ( ) func main() { + var serverOpts = libhttp.ServerOptions{ + EnableIndexHTML: true, + } + var ( - flagAddress string flagExclude string flagInclude string flagHelp bool flagVersion bool ) + var shutdownIdleDuration string + + flag.StringVar(&serverOpts.Address, `address`, defAddress, + `Set listen address.`) + flag.StringVar(&serverOpts.BasePath, `base-path`, ``, + `Set the base path (or prefix) for handling HTTP request.`) + flag.StringVar(&shutdownIdleDuration, `shutdown-idle`, ``, + `Set the duration when server will shutting down after idle.`) - flag.StringVar(&flagAddress, `address`, defAddress, `Listen address`) flag.StringVar(&flagExclude, `exclude`, ``, `Regex to exclude files in base directory`) flag.BoolVar(&flagHelp, `help`, false, `Print the command usage`) flag.StringVar(&flagInclude, `include`, ``, `Regex to include files in base directory`) @@ -41,6 +52,14 @@ func main() { flag.Parse() + var err error + if shutdownIdleDuration != `` { + serverOpts.ShutdownIdleDuration, err = time.ParseDuration(shutdownIdleDuration) + if err != nil { + log.Fatalf(`invalid shutdown-idle %s: %s`, shutdownIdleDuration, err) + } + } + var cmdName = os.Args[0] if flagHelp { @@ -52,10 +71,7 @@ func main() { os.Exit(0) } - var ( - dirBase = flag.Arg(0) - err error - ) + var dirBase = flag.Arg(0) if len(dirBase) == 0 { dirBase, err = os.Getwd() if err != nil { @@ -69,7 +85,6 @@ func main() { MaxFileSize: -1, TryDirect: true, } - mfs *memfs.MemFS ) if len(flagInclude) != 0 { mfsOpts.Includes = []string{flagInclude} @@ -78,20 +93,11 @@ func main() { mfsOpts.Excludes = []string{flagExclude} } - mfs, err = memfs.New(&mfsOpts) + serverOpts.Memfs, err = memfs.New(&mfsOpts) if err != nil { log.Fatalf(`%s: %s`, cmdName, err) } - var ( - serverOpts = libhttp.ServerOptions{ - Memfs: mfs, - Address: flagAddress, - EnableIndexHTML: true, - } - httpd *libhttp.Server - ) - listeners, err := systemd.Listeners(true) if err != nil { log.Fatal(err) @@ -108,6 +114,8 @@ func main() { } } + var httpd *libhttp.Server + httpd, err = libhttp.NewServer(serverOpts) if err != nil { log.Fatalf(`%s: %s`, cmdName, err) @@ -117,7 +125,7 @@ func main() { signal.Notify(signalq, os.Interrupt, syscall.SIGTERM) go func() { - log.Printf(`%s: serving %q at http://%s`, cmdName, dirBase, flagAddress) + log.Printf(`%s: serving %q at http://%s`, cmdName, dirBase, serverOpts.Address) var errStart = httpd.Start() if errStart != nil { log.Printf(`%s: %s`, cmdName, errStart) |
