added webdav

This commit is contained in:
ston1th 2022-03-14 22:58:36 +01:00
commit 78bd754298
25 changed files with 7783 additions and 90 deletions

View file

@ -22,10 +22,11 @@ import (
var (
version string
src string
dst string
metadata string
listen string
src string
dst string
metadata string
listenHttp string
listenWebdav string
log logr.Logger
)
@ -35,30 +36,52 @@ func main() {
flag.StringVar(&src, "src", "", "root directory (NFS share)")
flag.StringVar(&dst, "dst", "", "local directory to cache files")
flag.StringVar(&metadata, "data", "", "path to metadata file")
flag.StringVar(&listen, "listen", "127.0.0.1:8080", "listen addr:port")
flag.StringVar(&listenHttp, "listen", "127.0.0.1:8080", "listen addr:port")
flag.StringVar(&listenWebdav, "webdav", "", "listen addr:port for webdav")
flag.Parse()
log = klogr.New().WithName("main")
log.Info("starting cachefs", "version", version)
fs, err := fs.NewFS(src, dst, metadata, klogr.New().WithName("fs"))
filesystem, err := fs.NewFS(src, dst, metadata, klogr.New().WithName("fs"))
if err != nil {
klog.Fatalf("init failed: %s", err)
}
s := &http.Server{Addr: listen, Handler: srv.NewFileServer(fs, klogr.New().WithName("server"))}
s := &http.Server{Addr: listenHttp, Handler: srv.NewFileServer(filesystem, klogr.New().WithName("server"))}
go func() {
err := s.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
klog.Fatalf("init failed: %s", err)
}
}()
var dav *http.Server
if listenWebdav != "" {
dav = &http.Server{
Addr: listenWebdav,
Handler: srv.NewWebDavServer(
fs.NewWebDavFS(filesystem),
klogr.New().WithName("webdav"),
),
}
go func() {
err := dav.ListenAndServe()
if err != nil && err != http.ErrServerClosed {
klog.Fatalf("init failed: %s", err)
}
}()
}
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
log.Info("cachefs shutdown initiated")
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
s.Shutdown(ctx)
fs.Close()
cancel()
if dav != nil {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
dav.Shutdown(ctx)
cancel()
}
filesystem.Close()
log.Info("cachefs shutdown completed")
}