Skip to content

Commit b5e1191

Browse files
committed
Improve logging
Now certain internal errors are logged to stderr to make debugging easier.
1 parent 3f80de1 commit b5e1191

File tree

1 file changed

+27
-7
lines changed

1 file changed

+27
-7
lines changed

server.go

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ var ErrFileDoesntExists = errors.New("file doesn't exists")
2020

2121
// filedrop server structure, implements http.Handler.
2222
type Server struct {
23-
DB *db
24-
Conf Config
25-
Logger *log.Logger
23+
DB *db
24+
Conf Config
25+
Logger *log.Logger
26+
DebugLogger *log.Logger
2627

2728
fileCleanerStopChan chan bool
2829
}
@@ -41,6 +42,12 @@ func New(conf Config) (*Server, error) {
4142
return s, err
4243
}
4344

45+
func (s *Server) dbgLog(v ...interface{}) {
46+
if s.DebugLogger != nil {
47+
s.DebugLogger.Println(v...)
48+
}
49+
}
50+
4451
// AddFile adds file to storage and returns assigned UUID which can be directly
4552
// substituted into URL.
4653
func (s *Server) AddFile(contents io.Reader, contentType string, maxUses uint, storeUntil time.Time) (string, error) {
@@ -52,18 +59,22 @@ func (s *Server) AddFile(contents io.Reader, contentType string, maxUses uint, s
5259

5360
_, err = os.Stat(outLocation)
5461
if err == nil {
62+
s.Logger.Println("UUID collision detected:", fileUUID)
5563
return "", errors.New("UUID collision detected")
5664
}
5765

5866
file, err := os.Create(outLocation)
5967
if err != nil {
68+
s.Logger.Printf("File create failure (%v): %v\n", fileUUID, err)
6069
return "", errors.Wrap(err, "file open")
6170
}
6271
if _, err := io.Copy(file, contents); err != nil {
72+
s.Logger.Printf("File write failure (%v): %v\n", fileUUID, err)
6373
return "", errors.Wrap(err, "file write")
6474
}
6575
if err := s.DB.AddFile(nil, fileUUID.String(), contentType, maxUses, storeUntil); err != nil {
6676
os.Remove(outLocation)
77+
s.Logger.Printf("DB add failure (%v, %v, %v, %v): %v\n", fileUUID, contentType, maxUses, storeUntil, err)
6778
return "", errors.Wrap(err, "db add")
6879
}
6980

@@ -85,11 +96,13 @@ func (s *Server) removeFile(tx *sql.Tx, fileUUID string) error {
8596
}
8697

8798
if err := s.DB.RemoveFile(tx, fileUUID); err != nil {
99+
s.Logger.Printf("DB remove failure (%v): %v\n", fileUUID, err)
88100
return errors.Wrap(err, "db remove")
89101
}
90102

91103
if err := os.Remove(fileLocation); err != nil {
92104
// TODO: Recover DB entry?
105+
s.Logger.Printf("File remove failure (%v): %v\n", fileUUID, err)
93106
return errors.Wrap(err, "file remove")
94107
}
95108
return nil
@@ -132,13 +145,14 @@ func (s *Server) GetFile(fileUUID string) (r io.Reader, contentType string, err
132145
}
133146
defer tx.Rollback() // rollback is no-op after commit
134147

148+
s.dbgLog("Serving file", fileUUID)
149+
135150
if s.DB.ShouldDelete(tx, fileUUID) {
151+
s.dbgLog("File removed just before getting, UUID:", fileUUID)
136152
if err := s.removeFile(tx, fileUUID); err != nil {
137153
s.Logger.Println("Error while trying to remove file", fileUUID+":", err)
138-
139154
}
140155
if err := tx.Commit(); err != nil {
141-
s.Logger.Println("Tx commit error:", err)
142156
return nil, "", err
143157
}
144158
return nil, "", ErrFileDoesntExists
@@ -157,7 +171,6 @@ func (s *Server) GetFile(fileUUID string) (r io.Reader, contentType string, err
157171
return nil, "", err
158172
}
159173
if err := tx.Commit(); err != nil {
160-
s.Logger.Println("Tx commit error:", err)
161174
return nil, "", errors.Wrap(err, "tx commit")
162175
}
163176

@@ -179,6 +192,8 @@ func (s *Server) acceptFile(w http.ResponseWriter, r *http.Request) {
179192
return
180193
}
181194

195+
s.dbgLog("Acceping file")
196+
182197
if s.Conf.Limits.MaxFileSize != 0 && r.ContentLength > int64(s.Conf.Limits.MaxFileSize) {
183198
w.WriteHeader(http.StatusRequestEntityTooLarge)
184199
w.Write([]byte("413 request entity too large"))
@@ -222,6 +237,7 @@ func (s *Server) acceptFile(w http.ResponseWriter, r *http.Request) {
222237

223238
fileUUID, err := s.AddFile(r.Body, r.Header.Get("Content-Type"), maxUses, storeUntil)
224239
if err != nil {
240+
s.Logger.Println("Error while serving", r.RequestURI+":", err)
225241
w.WriteHeader(http.StatusInternalServerError)
226242
w.Write([]byte(err.Error()))
227243
return
@@ -268,8 +284,8 @@ func (s *Server) serveFile(w http.ResponseWriter, r *http.Request) {
268284
if err == ErrFileDoesntExists {
269285
w.WriteHeader(http.StatusNotFound)
270286
w.Write([]byte("404 not found"))
271-
272287
} else {
288+
s.Logger.Println("Error while serving", r.RequestURI+":", err)
273289
w.WriteHeader(http.StatusInternalServerError)
274290
w.Write([]byte(err.Error()))
275291
}
@@ -333,6 +349,10 @@ func (s *Server) cleanupFiles() {
333349
return
334350
}
335351

352+
if len(uuids) != 0 {
353+
s.dbgLog(len(uuids), "to be removed")
354+
}
355+
336356
for _, fileUUID := range uuids {
337357
if err := os.Remove(filepath.Join(s.Conf.StorageDir, fileUUID)); err != nil {
338358
s.Logger.Println("Failed to remove file during clean-up:", err)

0 commit comments

Comments
 (0)