diff --git a/cmd/dwelling-upload/main.go b/cmd/dwelling-upload/main.go index cd2b40a..56b6127 100644 --- a/cmd/dwelling-upload/main.go +++ b/cmd/dwelling-upload/main.go @@ -5,6 +5,8 @@ import ( "dwelling-upload/internal/handlers" "dwelling-upload/pkg/logging" "dwelling-upload/pkg/server" + "dwelling-upload/pkg/utils" + "dwelling-upload/pkg/watcher" "flag" "log" "net/http" @@ -56,23 +58,41 @@ func main() { logErr, err := logging.NewLogger(config.Log.Error, config.Log.ToStdout) if err != nil { - log.Fatalln("failed to open error logger:", err) + log.Fatalln("error logger:", err) } defer logErr.Close() logUpload, err := logging.NewLogger(config.Log.Upload, config.Log.ToStdout) if err != nil { - log.Fatalln("failed to open upload logger:", err) + log.Fatalln("upload logger:", err) } defer logUpload.Close() logDownload, err := logging.NewLogger(config.Log.Download, config.Log.ToStdout) if err != nil { - log.Fatalln("failed to open download logger:", err) + log.Fatalln("download logger:", err) } defer logDownload.Close() - hand := handlers.NewUploadHandlers(config, logErr, logUpload, logDownload) + watcha, err := watcher.NewFSWatcher() + if err != nil { + logErr.Fatalln(err) + } + defer watcha.Close() + + if err := watcha.AddWatch(config.Uploads.Directory, watcher.CrDelMask); err != nil { + logErr.Fatalln(err) + } + + uploadDirNotify := make(chan uint32) + uploadDirSize, err := utils.DirectorySize(config.Uploads.Directory) + if err != nil { + logErr.Fatalln(err) + } + + watcha.WatchForMask(uploadDirNotify, watcher.CrDelMask) + + hand := handlers.NewUploadHandlers(config, logErr, logUpload, logDownload, &uploadDirSize) srv := server.NewHttpServer() srv.SetNotFoundHandler(hand.NotFound) @@ -88,9 +108,22 @@ func main() { doneSignal := make(chan os.Signal, 1) signal.Notify(doneSignal, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) - <-doneSignal + for { + select { + case <-doneSignal: + if err := srv.Stop(); err != nil { + logErr.Fatalln(err) + } + case <-uploadDirNotify: + sz, err := utils.DirectorySize(config.Uploads.Directory) + if err != nil { + logErr.Println(err) + } - if err := srv.Stop(); err != nil { - logErr.Fatalln(err) + if sz > 0 { + uploadDirSize = sz + } + } } + }