aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-02-11 22:26:51 +0700
committerShulhan <ms@kilabit.info>2026-02-11 22:26:51 +0700
commitaa33fe5d71eda1ccdf38e29f5ea96c2ef4a844a6 (patch)
tree2f6121fda6c953febf8824bba7158d88b4a91945
parent5b41090e6c523a1e66047329e51c2b0db280a581 (diff)
downloadpakakeh.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.
-rw-r--r--CHANGELOG.adoc13
-rw-r--r--cmd/httpdfs/main.go44
2 files changed, 38 insertions, 19 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 3130ddba..7f41b747 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -42,7 +42,18 @@ Legend,
== pakakeh.go v0.62.0 (2026-xx-xx)
//{{{
-[#v0_61_1_lib_http]
+[#v0_62_0__cmd_httpdfs]
+=== 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.
+
+
+[#v0_62_0__lib_http]
=== lib/http
==== 🌱 Add BasePath to the ServerOptions
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)