1
0
Fork 0

Log errors to stdout (systemd-journal) instead of a separate file. Also updated error messages. And since journal already puts a date, use only a Llongfile flag to print a place where an error occured.

This commit is contained in:
Alexander Andreev 2023-05-24 21:45:46 +04:00
parent c43c314a78
commit c85c6555e2
Signed by: Arav
GPG Key ID: D22A817D95815393
2 changed files with 25 additions and 32 deletions

View File

@ -24,6 +24,7 @@ var version string
func main() {
flag.Parse()
log.SetFlags(log.Llongfile)
if *showVersion {
fmt.Println("dwelling-upload Ver. ", version, "\nCopyright (c) 2022,2023 Alexander \"Arav\" Andreev <me@arav.su>")
@ -54,12 +55,6 @@ func main() {
}
}
logErr, err := logging.New(config.Log.Error)
if err != nil {
log.Fatalln("error logger:", err)
}
defer logErr.Close()
logFile, err := logging.New(config.Log.File)
if err != nil {
log.Fatalln("file logger:", err)
@ -68,23 +63,23 @@ func main() {
watcha, err := watcher.NewInotifyWatcher()
if err != nil {
logErr.Fatalln(err)
log.Fatalln(err)
}
defer watcha.Close()
if err := watcha.AddWatch(config.Uploads.Directory, watcher.CrDelMask); err != nil {
logErr.Fatalln(err)
log.Fatalln(err)
}
uploadDirNotify := make(chan uint32)
uploadDirSize, err := utils.DirectorySize(config.Uploads.Directory)
if err != nil {
logErr.Fatalf("failed to get initial size of %s: %s", config.Uploads.Directory, err)
log.Fatalf("failed to get initial size of %s: %s", config.Uploads.Directory, err)
}
watcha.WatchForMask(uploadDirNotify, watcher.CrDelMask)
hand := http.NewUploadHandlers(config, logErr, logFile, &uploadDirSize)
hand := http.NewUploadHandlers(config, logFile, &uploadDirSize)
srv := http.NewHttpServer()
srv.SetNotFoundHandler(http.NotFound)
@ -100,7 +95,7 @@ func main() {
srv.DELETE("/:hash", hand.Delete)
if err := srv.Start(network, *listenAddress); err != nil {
logErr.Fatalln("failed to start a server:", err)
log.Fatalln("failed to start a server:", err)
}
doneSignal := make(chan os.Signal, 1)
@ -112,12 +107,11 @@ func main() {
for {
select {
case <-logReopenSignal:
logErr.Reopen(config.Log.Error)
logFile.Reopen(config.Log.File)
case <-uploadDirNotify:
uploadDirSize, err = utils.DirectorySize(config.Uploads.Directory)
if err != nil {
logErr.Println("failed to get uploads directory size:", err)
log.Println("failed to get uploads directory size:", err)
}
}
}
@ -126,6 +120,6 @@ func main() {
<-doneSignal
if err := srv.Stop(); err != nil {
logErr.Fatalln("failed to properly shutdown a server:", err)
log.Fatalln("failed to properly shutdown a server:", err)
}
}

View File

@ -10,6 +10,7 @@ import (
"encoding/hex"
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
@ -20,16 +21,14 @@ import (
type UploadHandlers struct {
conf *configuration.Configuration
logErr *logging.Logger
logFile *logging.Logger
uploadDirSize *int64
}
func NewUploadHandlers(conf *configuration.Configuration, lErr, lFile *logging.Logger, uploadDirSize *int64) *UploadHandlers {
func NewUploadHandlers(conf *configuration.Configuration, lFile *logging.Logger, uploadDirSize *int64) *UploadHandlers {
return &UploadHandlers{
conf: conf,
logErr: lErr,
logFile: lFile,
uploadDirSize: uploadDirSize}
}
@ -57,16 +56,16 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
r.Body = http.MaxBytesReader(w, r.Body, fMaxSizeBytes)
if err := r.ParseMultipartForm(fMaxSizeBytes); err != nil {
h.logErr.Println("failed to parse form:", err)
http.Error(w, err.Error(), http.StatusExpectationFailed)
log.Println("failed to parse upload form:", err)
http.Error(w, "Failed to parse upload form.", http.StatusExpectationFailed)
return
}
f, fHandler, err := r.FormFile("file")
if err != nil {
h.logErr.Println("failed to open incoming file:", err)
log.Println("failed to open incoming file:", err)
w.WriteHeader(http.StatusInternalServerError)
http.Error(w, "cannot read incoming file", http.StatusInternalServerError)
http.Error(w, "Error reading an incoming file.", http.StatusInternalServerError)
return
}
defer func() {
@ -77,15 +76,15 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
var leftSpace int64 = storCapacity - *h.uploadDirSize
if leftSpace < fHandler.Size {
h.logErr.Println("not enough space left in storage, only", leftSpace>>20, "MiB left")
log.Println("not enough space left in storage, only", leftSpace>>20, "MiB left")
w.WriteHeader(http.StatusInternalServerError)
web.ErrorNoSpace(utils.MainSite(r.Host), w)
}
s256 := sha256.New()
if _, err := io.Copy(s256, f); err != nil {
h.logErr.Println("failed to compute SHA-256 hash:", err)
http.Error(w, "cannot compute hash for a file", http.StatusInternalServerError)
log.Println("failed to compute a SHA-256 hash:", err)
http.Error(w, "A hash for the file cannot be computed.", http.StatusInternalServerError)
return
}
@ -101,8 +100,8 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
if os.IsNotExist(err) {
fDst, err := os.Create(fPath)
if err != nil {
h.logErr.Println("failed to open file for writing", err)
http.Error(w, "cannot create your file", http.StatusInternalServerError)
log.Println("failed to open file for writing", err)
http.Error(w, "File cannot be written.", http.StatusInternalServerError)
return
}
defer fDst.Close()
@ -117,8 +116,8 @@ func (h *UploadHandlers) Upload(w http.ResponseWriter, r *http.Request) {
_, err = io.Copy(fDst, f)
if err != nil {
h.logErr.Println("failed to copy uploaded file to destination:", err)
http.Error(w, "cannot copy file's content", http.StatusInternalServerError)
log.Println("failed to copy uploaded file to destination:", err)
http.Error(w, "Failed to copy uploaded file to the storage.", http.StatusInternalServerError)
return
}
@ -164,8 +163,8 @@ func (h *UploadHandlers) Download(w http.ResponseWriter, r *http.Request) {
fd, err := os.Open(path)
if err != nil {
h.logErr.Println("failed to open file to read:", err)
w.WriteHeader(http.StatusInternalServerError)
log.Println("failed to open file to read:", err)
http.Error(w, "Failed to open file to read.", http.StatusInternalServerError)
return
}
defer fd.Close()
@ -196,8 +195,8 @@ func (h *UploadHandlers) Delete(w http.ResponseWriter, r *http.Request) {
err = os.Remove(path)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprint(w, err)
log.Println("failed to remove a file:", err)
http.Error(w, "Failed to remove a file.", http.StatusInternalServerError)
return
}